php - 从第一个客户端请求开始在 php 中启动一个 websocket 服务器

标签 php websocket

我正在尝试使用 websocket 替换对服务器的常量 ajax 请求,这会更新 ajax 信息。

据我所知,在客户端-服务器场景中,我应该从命令行启动一个 php websocket 服务器:

php -q myserver.php

我想要获得的是在客户端第一次连接时启动服务器,并将此服务器用于所有其他客户端,不使用命令行:

var socket = new WebSocket("ws://localhost:10000/myserver.php");

如果服务器未运行并为此客户端打开连接,我想运行此命令。

这可能吗?

最佳答案

是的,这是可能的,但你应该看看 phpwebsocket

var host = "ws://localhost:10000/myserver.php";
try{
  socket = new WebSocket(host);
  log('WebSocket - status '+socket.readyState);
  socket.onopen    = function(msg){ log("Welcome - status "+this.readyState); };
  socket.onmessage = function(msg){ log("Received: "+msg.data); };
  socket.onclose   = function(msg){ log("Disconnected - status "+this.readyState); };
}
catch(ex){ log(ex); }

你运行的服务器端 php -q myserver.php

log("Handshaking...");
list($resource,$host,$origin) = getheaders($buffer);
$upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
        "Upgrade: WebSocket\r\n" .
        "Connection: Upgrade\r\n" .
        "WebSocket-Origin: " . $origin . "\r\n" .
        "WebSocket-Location: ws://" . $host . $resource . "\r\n" .
        "\r\n";
$handshake = true;
socket_write($socket,$upgrade.chr(0),strlen($upgrade.chr(0)));

phpwebsocket默认不支持RFC-6455所以你也可以看看下面的

关于php - 从第一个客户端请求开始在 php 中启动一个 websocket 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894272/

相关文章:

php - Laravel关系: query with multiple Foreign keys

java - Spring应用服务器通过websocket向客户端传输数据

javascript - 是否可以在网络套接字中建立房间的概念?

javascript - WebSocket 仅在循环完成后发送消息

python - AppEngine Python 3.7 标准环境上的 Websockets?

php - 使用 join 和两个 where 条件更新语句

php - 如何创建 Hi5 的分享按钮

javascript - try catch 在 Node socket.io 监听器中不起作用

php - 较长的PHP SOAP流程

javascript - 使用特定变量从 PHP echo 调用 JS 函数时出现问题