0

我正在尝试在 php 中创建一个聊天解决方案,该解决方案将允许通过 websocket 接收消息,但我遇到了一个问题,即由于检查新消息的代码,连接的客户端将占用主进程成为一个循环(我正在使用 rabbitmq 并监听队列中的新消息)。

是否有一个 php 构造可用于运行本质上与主进程异步循环的代码。

主要过程将是一个脚本,该脚本为客户端托管 websocket 解决方案,目的是从客户端获取消息,同时将传入消息转发给客户端。Rabbitmq 通过队列构造处理消息,并像下面这样使用,其目的是 $ec->process($user, $content) 向客户端发送消息

将以下代码添加到连接的函数会阻止与客户端之间的任何进一步通信,因此希望将其移动到线程上或让它异步运行

据我所知,大多数满足异步函数的库将等待返回或完成事件,在以下情况下,应用程序不关心响应,尽管它的目的只是将队列上的任何新消息依赖于用户..

我尝试过使用 spatie,但感觉目标是返回的响应,它看起来从来没有像正在执行的代码。

像 amphp 这样的东西是否能够适应这种情况,有人可以推荐其他东西吗,我的 php 版本是 7.2 我不相信线程是要走的路,如果它将来会被贬低并且可能会带来性能问题,

如果有人对基于 PHP 的聊天解决方案有经验或其他建议,我不会使用任何特定的东西,该解决方案不需要迎合许多用户。

//
  $channel->queue_declare('hello2', false, false, false, false);
      
  $ec = $this->echo;
  $us = $this->user;
  $callback = function ($msg) use ($ec, $us){
        $message_data = explode("::", $msg->body);
        $user_id = $message_data[0];
        $message = $message_data[1];
    
        $content = '[x] Received ' . $message . " from " . $user_id;
    
        //$this->send($user,$content);
        $ec->process($us, $content);
  }
        
  //$channel->basic_consume('hello2', '', false, true, false, false, $callback);

我使用它作为后端 websocket 解决方案 https://github.com/ghedipunk/PHP-Websockets

4

0 回答 0