【问题标题】:PHP websocket server and JavaScript connectionPHP websocket 服务器和 JavaScript 连接
【发布时间】:2019-01-13 02:49:45
【问题描述】:

我已经创建了一个 PHP websocket 服务器脚本,如下所示。

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_bind($socket, '127.0.0.1', 5001);
while (true) {
    $result = socket_listen($socket);
    $client =  socket_accept($socket);
    $input = socket_read($client, 1024);
    $output = 'Input Received: '.$input;
    socket_write($client, $output, strlen($output));
    socket_close($client);
}
socket_close($socket);

我已经使用以下命令在终端中执行了包含上述代码的文件

$ php server.php

现在我想使用 JavaScript 在前端获得响应。我使用了以下 JS sn-p 但无法正常工作。

var ws = new WebSocket("ws://localhost:5001/echo");
ws.onopen = function() {
ws.send("Message to send");
    alert("Message is sent...");
};
ws.onmessage = function (evt) { 
    var received_msg = evt.data;
    alert("Message is received...");
};
ws.onclose = function() { 
    alert("Connection is closed..."); 
};

收到以下错误:

到 'ws://localhost:5001/echo' 的 WebSocket 连接失败:WebSocket 握手期间出错:net::ERR_INVALID_HTTP_RESPONSE

【问题讨论】:

  • 你已经创建了一个 TCP 套接字,而不是一个 websocket。不止于此。
  • @BenFortune - 如何创建 websocket (ws) 而不是 tcp 套接字?还是 tcp socket 能满足我的要求?
  • @BenFortune - 我可以做些什么来让 JavaScript 与 TCP 通信,而不是使用 3rd 方库创建 websocket。
  • 没什么。浏览器通常不支持使用 JS 的原始 TCP 连接。你需要一个抽象,这就是 websocket 存在的原因。

标签: javascript php websocket localhost listener


【解决方案1】:

编写 PHP websocket 服务器需要与通过 ws:// 连接到您的客户端执行一定的握手。此外,您需要对进出的消息进行解码和编码。当客户端通过 wss:// 与您联系时,真正的乐趣就开始了,然后您必须在 PHP 服务器中处理证书和密钥,并使用 stream-io 而不是 socket-io 等等。你可以看看我对这一切的实现,并将其作为另一个起点。

https://github.com/napengam/phpWebSocketServer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2017-08-23
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多