在PHP上使用Ratchet和WebSockets的私人聊天和群聊

时间:2016-12-12 21:08:39

标签: php websocket chat ratchet

我的目标是制作一个聊天应用程序,其中包含私人和群聊的选项。我更习惯使用Ratchet和WebSockets与PHP,而不是使用node.js,因为人们告诉我这将是最好的。

虽然我在全球聊天的背景下只看过WebSockets的例子。

我的方法是使用WebSocket id并将其存储在数据库中,因为当人们请求与某个人或某个组的人聊天时,我会给服务器那些id,它只会发送给那些人

这是正确的方法吗?有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

创建套接字时,您可以创建资源的句柄;您无法将句柄存储到数据库中的资源。

您需要做的是为每个用户创建一对一的客户端 - 服务器套接字连接,然后通过这些连接分配聊天。如果用户断开连接,则套接字连接丢失,您无法发送消息,因此您必须存储在数据库中,然后在连接时刷新。

答案 1 :(得分:0)

如果您使用Ratchet,这是一个很好的websocket的PHP库,您还可以阅读有关the WAMP server的实现,the WAMP protocol(v1)的实现,关于创建多个"主题",您的情况下的聊天室。

建议在WAMP协议之上构建多频道聊天服务器。

在您的情况下,您还希望保护自己的主题。您必须以自己的方式实现此安全性,并可能按主题限制2个用户...

第一种方法可能是使用令牌。当用户想要私下与某人交谈时,他创建了一个带有秘密令牌的私人频道,然后他将这个秘密令牌传递给他想要谈话的用户。因此,使用WAMP协议,就像使用足够的秘密令牌创建名为/chat/5sd4f5qsg8rr5sg8rg的主题一样。

另一种更加构造的方法可以是在数据库中存储元组userA / userB / topic名称,然后创建主题并仅允许这两个用户加入它。 当有人加入时,通知另一个(通过相同的websocket连接)他的朋友想要谈话(或自动打开聊天窗口......)。