我正在尝试使用WebSocket开发一个即时信使。
我有多个运行服务器的实例(比如server1、server2)。两个想聊天的用户(比如userA,userB)。但连接到不同的服务器。UserA到Server1,UserB到server2
需要一些如何实施的建议
方法1:
最初,我想拥有一个集中的数据库,它存储连接(无论何时建立连接)。类似于(最简单的表格结构)
User_id , Socket_object 假设userA正在向userB发送消息。
这样,我将从数据库中获取接收器的套接字对象( UserB ),并将消息直接发送到UserB。但后来我认识到ServerSocket对象在Java中是不可序列化的。
办法2:
每当建立连接时,接受连接的服务器可以将以下详细信息保存在表中。
user_id , server_name , server_port 当某个服务器收到消息时。它从表中获取目标服务器的详细信息,并与目标服务器建立连接(可能是HTTP,因为我们不需要持久化)并推送消息。然后,目标服务器将信息传递给相应的用户。
如何继续执行?还有其他更好的方法来实现它吗。
请不要建议一些第三方图书馆。
发布于 2020-02-17 22:10:16
第二种方法听起来比前一种更好,尽管我不会使用它。在服务器上加载大量消息时处理数据库可能很费时。
解决此问题的最佳解决方案是内存数据库,例如实现发布-订阅的Redis。
它将为您节省大量的开发时间,并将表现更好。
如果你真的想自己实现一些东西,我建议在这些服务器前开发一个负载均衡器。
每当用户想要连接时,它都会导航他的消息到某个服务器,并保持它以某种数据结构连接到服务器X。
它将负责簿记并将每条消息导航到相关服务器。
当某个服务器在另一台服务器上从用户X接收到用户Y的消息时,它将把它发送到负载均衡器(或您想要调用它的任何东西),后者将消息路由到正确的服务器。
我认为,在用户和连接到的服务器之间的内存映射中,最好是聊天而不是数据库。
https://softwareengineering.stackexchange.com/questions/405348
复制相似问题