【发布时间】:2015-06-01 05:34:10
【问题描述】:
我正在为 Facebook Messenger 或 WhatsApp 等服务编写后端。
我开始关注这个精彩的tutorial。
我使用 Python (Django) 编写的 API 来执行此操作。 除了这个 API,我还有一个 Redis 进程和一个正在运行的 node.js 服务器(仅限本地主机)。 node.js 服务器使用 socket.io 库通过 websockets 进行实时通信
可以从任何客户端向 Django API 发送包含消息的 HTTP 请求,后者又将消息发布到特定通道上的 Redis。
node.js 服务器已订阅 Redis 频道,并在发布此类消息时收到通知。 Node 会跟踪哪些套接字当前与一组套接字 id 连接,这些套接字 id 以某个用户标识符为键。
我对此有几个问题:
1.私信
我想向某个用户发送一条消息。我最初的方法是让 HTTP 请求(发送到 Django)包含消息应该到达的用户。当此消息到达 node.js 服务器(通过 redis)时,node 可以在一组客户端中找到该用户。 Django 显然(?)需要知道哪个 socket.io 套接字属于哪个用户。即 Django 需要知道该节点应该使用哪个用户识别密钥来获取正确的套接字。
这是一个好方法吗?由于我只使用一个发布渠道,redis-server 会成为瓶颈吗?如果源用户发送消息时,消息的目标用户下线了怎么办?我想获取该事件并发送推送通知。
2。房间
如果没有启动和维护群组对话的功能,此服务将不会有任何好处。根据我的阅读,我应该为此创建 socket.io:s rooms。那么我的问题是,我如何在会话之间维护房间?如果参与群组对话的每个用户都脱机并因此从 node.js 服务器:s 客户端数组中删除会怎样。我可以以某种方式在 Django 服务器中的会话之间存储房间吗?
非常感谢任何帮助和/或反馈/想法。 谢谢
【问题讨论】:
-
您考虑过使用 SwampDragon 吗? swampdragon.net
-
我实际上看到了那个框架。看起来不错。我仍然需要知道如何针对特定用户以及如何处理群组对话。
-
虽然这不是 Socket 之类的框架,但我认为 Django-websocket-redis 对于您想用 Django 进行的任何套接字都非常有希望。对我来说,Socket.io/Node 的大部分困难在于维护一个完全独立的客户端框架,必须同时运行服务器等。这个模块避免了很多。
标签: django node.js websocket redis socket.io