php - 将数据从 PHP 客户端发送到 PHP Webserver Socket
问题描述
我需要从 PHP 客户端以一种方式(例如推送通知消息)向我的 websocket 服务器发送一些数据,但是我有问题要这样做。
PHP websocket 服务器正常工作,如果我从浏览器打开多个选项卡,则服务器能够接收和发送消息,但我在 PHP 中有另一个微服务,现在我想使用 PHP 向 websocket 服务器发送推送通知,但我不知道该怎么做。
Thw websocket 服务器在 ws://0.0.0.0:8020 上运行
我正在尝试这样的事情:
<?php
$host = "localhost";
$port = 8020;
$message = "Hello Server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Fail1\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Fail2\n");
var_dump($socket);
var_dump($result);
?>
ps PHP websocket服务器和PHP客户端在同一台机器上,我也尝试过进程间套接字,但没有运气。
解决方案
最后,我找到了解决方案,这是我的最终工作代码:
<?php
$host = "localhost";
$port = 8020;
$context = stream_context_create();
$socket = @stream_socket_client(
$host . ':' . $port,
$errno,
$errstr,
30,
STREAM_CLIENT_CONNECT,
$context
);
$key = generateWebsocketKey();
$headers = "HTTP/1.1 101 Switching Protocols\r\n";
$headers .= "Upgrade: websocket\r\n";
$headers .= "Connection: Upgrade\r\n";
$headers .= "Sec-WebSocket-Version: 13\r\n";
$headers .= "Sec-WebSocket-Key: $key\r\n\r\n";
stream_socket_sendto($socket, $headers);
stream_socket_sendto($socket, 'this is my socket test to websocket');
function generateWebsocketKey() {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"$&/()=[]{}0123456789';
$key = '';
$chars_length = strlen($chars);
for ($i = 0; $i < 16; $i++) $key .= $chars[mt_rand(0, $chars_length-1)];
return base64_encode($key);
}
?>
推荐阅读
- java - 在文件中存储大量对象的最佳方法是什么?
- node.js - 部署 MEAN 堆栈应用程序
- r - Ctrl+Enter 键盘快捷键在 RStudio 中间歇性停止工作
- mysql - 如何在 POST 正文的基础上创建动态插入语句
- react-native - 如何在 React Native Elements 库的 Overlay 组件的子组件上启用 onPress?
- spring - Activiti TimerBoundaryEvent 立即超时
- java - 在 Java 中比较不同格式的 2 个日期?
- javascript - 当我遍历整个项目数组时,如何仅显示一次标题?
- angular - 如何让 ngx-mask npm 包用于在 Angular 中屏蔽电话号码?
- stackdriver - 来自有效负载(Stackdrive)的 GCP 日志记录有效负载