Websocket多个频道与一个频道+服务器端处理[GroupChat]

时间:2015-10-05 07:29:03

标签: php websocket chat autobahn ratchet

假设我们想要创建私人聊天室,用户可以在这里聊天。用户可以加入多个/ x组。在每种情况下,我都需要在服务器上创建一个唯一的组,并为这些用户订阅。哪种方法是推荐/更高效的方式:

[1]在服务器端,我创建了一个Room类,并为每个群聊添加新的频道,例如“chats / room-asdhqk1”,“chats / room-fwuefhw1”,“chats / room-awsdhqwd2”。现在,某些指定用户可以加入此频道并添加到组客户端列表中。在客户端,用户订阅了他们添加到的组渠道。

问题:当用户在x通道中时,我需要在侧载后将他订阅到这些x通道。 好:可以通过群组频道名称向特定群组播放,订阅该频道的所有用户都会自动收到该消息,因为他们已订阅了js部分内的频道。

[2]每个用户获得自己的频道,例如“notifications / user-1”,“notifications / user-2”....在服务器端,我在Rooms Class(无通道)中创建组。通过将用户添加到房间列表的子列表中,可以将用户添加到特定房间。当他们彼此聊天时,服务器迭代群聊的订阅用户,并向每个用户通知频道发送消息 - 这里根本没有群组频道 - 仅按用户频道。

问题:我无法轻松地广播消息,我需要遍历每个订阅用户并将消息发送到他的通知频道。另外,我不能在前端使用“发布”方法轻松地将消息发布到频道,因为用户在不同的频道中分开。

好:最后,广播方法也会这样做:迭代订阅者列表。为了发送消息,我可以轻松实现与“发布”方法相同的RPC方法 - 查找组的订阅用户并将消息发送给他们。使用这种方法,用户不需要连接到客户端的x通道,他只有一个通道可以处理所有通道。

(我知道对于第二种方法,需要推送器(例如 zmq ))。

你有什么看法?我认为第二个更好,因为我不必在客户端订阅x-channels。如果用户需要首先连接到例如,这将不具有性能。 500频道。

问候。

0 个答案:

没有答案