php - 握手后如何从php websocket服务器中的js websocket客户端获取数据?
问题描述
我有一个nodejs
websocket 客户端和一个php
websocket 服务器。建立连接后,我需要获取客户端发送的数据......我不确定如何实现这一点。我对该主题进行了一些研究,但找不到任何有用的东西。
// client.js
import WebSocket from 'ws';
let ws = new WebSocket("ws://localhost:8080");
ws.on("open", () => {
ws.send("Hello World"); // sending data after connection is opened
});
// server.php
function newServer(string $address, int $port) {
// Create WebSocket.
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($server, $address, $port);
socket_listen($server);
$client = socket_accept($server);
// Send WebSocket handshake headers.
$request = socket_read($client, 5000);
preg_match('#Sec-WebSocket-Key: (.*)\r\n#', $request, $matches);
$key = base64_encode(pack(
'H*',
sha1($matches[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
));
$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-Accept: $key\r\n\r\n";
socket_write($client, $headers, strlen($headers));
// after handshake get data?
}
newServer("0.0.0.0", 8080);
解决方案
推荐阅读
- api - 如何从进程ID中找到exe名称
- email - 新订单电子邮件需要发送特定的电子邮件地址
- android - 访问服务器时如何保存会话标识符并发送?
- sql - “24-OCT-19 09.33.34.000000000 AM”的日期格式是什么?
- c++ - 如何将 CUDA 函数替换为单线程 CPU 函数?
- event-sourcing - 如果我们在投影后触发事件有什么缺点?
- django-templates - Django PolygonField - 如何在地图上显示?
- c++ - 为什么下面的函数模板代码编译不出来?
- jenkins - 是什么触发了 Jenkins 中的支持日志
- python - Python liste par 理解