我正在寻找集成 Client、Django 和 NodeJS 的解决方案。我的任务是构建一个用户可以相互消息的服务器。我有两个解决方案:
- 从客户端向 Django 服务器发送请求。 Django 服务器将在数据库中创建消息并将通知推送到 NodeJS 服务器(SocketIO),然后客户端将从 NodeJs 服务器获取更改。通过这个解决方案,我想问如何将请求套接字从Django推送到Node?strong>
- 从客户端向 Socket 服务器发送请求。 Socket服务器会在数据库中创建消息,然后将其发送给客户端。这个解决方案是好是坏?是否需要改进?
最佳答案
由于您使用两台服务器,因此您必须在数据库 Redis key value 中针对您的 user_id 存储 socket_id .
您将需要:
- Django API 服务器
- Redis 或任何其他数据库
- Node 套接字服务器
第二种解决方案 :
用于发送消息的 Django API 逻辑必须在 Node Socket 服务器上实现。
例如。用户认证、检查目标用户、存储消息、从数据库查找用户socket_id等。
第一个解决方案 :
- Use Redis Pub-Sub : 从 Django 服务器,您可以在事件上发布消息,例如“send_message”
{ event_name: "send_message", target_user_id:"t_id", send_user_id:"u_id", target_socket_id:"t_sid", message:"Hello target" }
在 Node 套接字服务器上,您可以订阅该事件并发送到特定的 socket_id
io.to(data.target_socket_id).emit("event", data);
- 您可以在 Node 服务器上创建一个端点来接收来自django服务器的数据并传递 车身参数
{ event_name: "send_message", target_user_id:"t_id", send_user_id:"u_id", target_socket_id:"t_sid", message:"Hello target" }
当 Node 服务器收到API请求时,您可以使用事件发射器来发出事件
process.emit(data.event_name,data)
在套接字连接文件中您可以配置事件监听器
process.on("send_message",(data)=>{
io.to(data.target_socket_id).emit("event", data);
});
关于node.js - 如何将 Django 服务器与 Nodejs SocketIO 服务器集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53440785/