如何将Django服务器与Nodejs SocketIO服务器集成

时间:2018-11-23 04:48:46

标签: node.js django socket.io

我正在找到集成Client,Django和NodeJS的解决方案。我的任务是建立一个服务器,用户可以互相消息。我有2个解决方案:

  1. 从客户端向Django服务器发送请求。 Django服务器将在数据库中创建Message并将通知推送到NodeJS服务器(SocketIO),然后Client将从NodeJs服务器获取更改。使用此解决方案,我想问如何将请求套接字从Django推送到Node?

enter image description here

  1. 从客户端向Socket服务器发送请求。套接字服务器将在数据库中创建消息,然后将其发送到客户端。这个解决方案好还是坏?需要改进吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

在使用两个服务器时,必须将socket_id与user_id相对应地存储在数据库Redis key value中。

您将需要:

  • Django Api服务器
  • Redis或任何其他数据库
  • 节点套接字服务器

第二个解决方案

用于发送消息的Django API逻辑必须在节点套接字服务器上实现。

例如用户身份验证,检查目标用户,存储消息,从数据库中找到用户socket_id等。

第一个解决方案

  1. 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”,消息:“ Hello target”   }

在Node套接字服务器上,您可以订阅该事件并发出特定的socket_id

  

io.to(data.target_socket_id).emit("event", data);

  1. 您可以在节点服务器上创建一个端点,以从Django服务器接收数据并传递 身体参数
  

{event_name:“ send_message”,target_user_id:“ t_id”,   send_user_id:“ u_id”,target_socket_id:“ t_sid”,消息:“ Hello target”   }

当节点服务器收到API请求时,您可以使用事件发射器来发射事件

process.emit(data.event_name,data)

您可以在套接字连接文件内部配置事件监听器

process.on("send_message",(data)=>{
    io.to(data.target_socket_id).emit("event", data); 
});