使用 Ratchet 创建/管理私人房间?

pad*_*apa 6 php websocket phpwebsocket ratchet

我正在制作 iOS 聊天应用程序。在研究了所需的技术和协议后,我决定尝试使用 websockets。由于我们的堆栈顶部是基于 php 的原因,我开始了解棘轮作为 PHP 的 websockets。我通过阅读文档为 ios 前端制作了简单的聊天服务器。聊天工作得很好,我也很满意。我想知道如何创建单独的私人聊天室。是否需要为不同的房间运行不同的套接字事件循环实例?

我制作的示例服务器使用单个事件循环来管理用户连接并将消息分派到不同的连接/用户 ID。我真的很想创建私人聊天室,但没有找到任何我可以确信的信息。

我是否必须在此事件循环中虚拟地管理每个连接/用户 ID,例如通过控制消息的分发来决定哪些用户可以直接相互聊天?或者他们真的是一种单独的方式来做到这一点?这是我实现的文档中的事件循环示例:

   <?php
   use Ratchet\Server\IoServer;
   use Ratchet\Http\HttpServer;
   use Ratchet\WebSocket\WsServer;
   use MyApp\Chat;
   
       require dirname(__DIR__) . '/vendor/autoload.php';
   
       $server = IoServer::factory(
           new HttpServer(
               new WsServer(
                   new Chat()
               )
           ),
           8080
       );
   
       $server->run();
Run Code Online (Sandbox Code Playgroud)

我想说的是,我是一名 iOS/Android 开发人员,真的没有专家或对 Web 前端/后端技术有流利的知识。

Ale*_*exM 1

不同的房间需要运行不同的套接字事件循环实例吗?

不需要。只需要一个循环。你的片段很好。您要做的就是调整Chat类,以便它接受来自用户输入的附加参数 - 房间 ID/名称。

例如,用户发送消息{"cmd":"msg", "message":"Hi", "room": 1},则Chat应该仅将消息发送给加入该房间的用户。当然,您应该实现其他用户方法,例如{"cmd":"join", "room": 1}{"cmd":"leave", "room": 1}