请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多端口下,后台发布赛况的时候,怎么才能让后台推送的消息只发到赛况里呢。聊天室的消息只发给聊天室呢

丝袜老师,请问一下,当我的ws.php服务监听了8821时,

 CONST HOST = "0.0.0.0";
    CONST PORT = 8811;
    CONST CHART_PORT = 8812;

    public $ws = null;
    public function __construct() {

    $this->ws = new swoole_websocket_server(self::HOST, self::PORT);
    $this->ws ->listen(self::HOST, self::CHART_PORT, SWOOLE_SOCK_TCP);

我通过后台发布直播信息时,客户端确收到了两次信息,图片
图片描述通过后台发布的直播信息,客户端,却有两次输出,然后,赛况数据就不能实时刷新了。
后台推送代码如下

  $clients = Predis::getInstance()->sMembers('live_game_key');

        foreach ($clients as $fd){
            $serv->push($fd,json_encode($data));
     
        }

这里的$ser->push推送,消息推送到聊天室,也推送到赛况里了,
请问老师,后台发布赛况的时候,怎么才能让后台推送的消息只发到赛况里呢。聊天室的消息只发给聊天室呢

正在回答 回答被采纳积分+3

2回答

我心依然_Song 2020-03-22 16:43:56

发布的赛况信息是通过异步任务执行发送的,异步任务中是从redis里面取出之前存的客户端的fd。所以可以在onopen中这样写:

public function onOpen($ws, $request) {
if ($ws->getClientInfo($request->fd)['server_port'] == self::PORT) {
\app\common\services\Redis::getInstance()->sadd('live_game_fd', $request->fd);
}
echo "js-client:".$request->fd.PHP_EOL;
}


如果是发布赛况信息的端口就存入redis,如果是聊天的则不存入。

异步任务:

//赛况
public function livePush($data, $serv=null) {
    $client = Redis::getInstance()->sMembers('live_game_fd');
    foreach($client as $cfd) {
        $serv->push($cfd, json_encode($data));
    }
}
//聊天信息
public function chatPush($data, $serv=null) {
    foreach($serv->ports[1]->connections as $fd) {
        $serv->push($fd, json_encode($data));
    }
}


0 回复 有任何疑惑可以回复我~
  • 这个方法我试了不行!
    回复 有任何疑惑可以回复我~ 2022-08-14 00:52:32
  • 还有别的办法吗
    回复 有任何疑惑可以回复我~ 2022-08-14 00:53:35
提问者 不吃鱼的喵儿 2019-01-08 17:46:44

刚刚,我用了个笨方法,通过判断:

websocket.onmessage = function(evt) {

    if(JSON.parse(evt.data).user){
        pushs(evt.data);
    }

    console.log("ws-server-return-data:" + evt.data);
}

onmessage里的值,然后拼接数据,想问下老师,有没有php代码处理的方式呢,就是后台提交只让他执行live.js,打印数据只让它打印live.js里,聊天只让他打印chart.js里

0 回复 有任何疑惑可以回复我~
  • 这个办法我试了不可以!
    回复 有任何疑惑可以回复我~ 2022-08-14 00:52:59
  • 还有别的办法吗?
    回复 有任何疑惑可以回复我~ 2022-08-14 00:53:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信