我已经在我的服务器上安装了以下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
答案 0 :(得分:0)
你无法直接做你想做的事。
你可以间接地做到这一点 - 我在商业化之前做过这个,我们采用的解决方案是数据库轮询。
所以你要做的就是在websocket服务器启动时创建一个循环,每隔几秒钟(比如10秒)运行一次,检查数据库表中是否有标记为未发送的消息。如果找到一个,则发送它并将其标记为已发送。
您的PHP后端当然可以写入此表,因此数据库充当您的websocket客户端/服务器和PHP后端之间的中介。
但是,如果你的websocket服务器已经运行了一个while循环,那么没有一个单独的线程就无法做到这一点。