PHP WebSocket-从服务器广播(发送)消息


PHP WebSocket - Broadcast(send) a message from server

我在服务器上安装了以下git:Flynsarmy/PHPWebSocket Chat,并成功设置了聊天,它运行良好,用户之间可以很好地交流。

在过去的24小时里,我尝试从另一个php文件发送一条系统消息:

$host = '89.163.140.48';  //where is the websocket server
$port = 9300;
$local = "http://www.indiamea.com";  //url where this script run
$data = '{"message":"TEST - MESSAGE - TEST"}';  //data to be send
$head = "GET /?token=$jwt HTTP/1.1"."'r'n".
            "Upgrade: WebSocket"."'r'n".
            "Connection: Upgrade"."'r'n".
            "Origin: $local"."'r'n".
            "Host: $host:$port"."'r'n".
            "Sec-WebSocket-Key: Bom4DUh5Brl8xmvUYbDQzA=="."'r'n".
            "Sec-WebSocket-Version: 13"."'r'n".
            "Content-Length: ".strlen($data)."'r'n"."'r'n";
//WebSocket handshake
$sock = fsockopen($host, $port, $errno, $errstr, 15);
fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
fwrite($sock, $data ) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);  //receives the data included in the websocket package "'x00DATA'xff"
fclose($sock);

Websocket正在接受请求(打开事件),但消息事件没有在server.php脚本中触发,这意味着消息不会发送给用户。

我试着在谷歌上搜索,但找不到任何解决方案。

我真的希望有人能帮我。

如果需要server.php代码,您可以在此处访问:https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/server.php

你不能直接做你想做的事情。

不过,你可以间接地做到这一点——我以前在商业上也这样做过,我们采用的解决方案是数据库轮询。

因此,您要做的是在websocket服务器启动时在其中创建一个循环,该循环每隔几秒(比如10秒)运行一次,以检查数据库表中标记为未发送的消息。如果它找到一个,则发送它并将其标记为已发送。

当然,PHP后端可以写入该表,因此数据库充当websocket客户端/服务器和PHP后端之间的中介。

但是,如果您的websocket服务器已经在运行while循环,那么如果没有单独的线程,这是不可能的。