【问题标题】:PHP WebSocket - Broadcast(send) a message from serverPHP WebSocket - 从服务器广播(发送)一条消息
【发布时间】:2016-05-14 08:58:43
【问题描述】:

我在我的服务器上安装了以下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 发送消息,这样我就可以在聊天中发送系统消息?

标签: php git websocket


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多