首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebSocket的即时通讯

使用WebSocket的即时通讯
EN

Software Engineering用户
提问于 2020-02-17 17:48:43
回答 1查看 269关注 0票数 1

我正在尝试使用WebSocket开发一个即时信使。

我有多个运行服务器的实例(比如server1、server2)。两个想聊天的用户(比如userA,userB)。但连接到不同的服务器。UserA到Server1,UserB到server2

需要一些如何实施的建议

方法1:

最初,我想拥有一个集中的数据库,它存储连接(无论何时建立连接)。类似于(最简单的表格结构)

代码语言:javascript
复制
User_id , Socket_object  

假设userA正在向userB发送消息。

这样,我将从数据库中获取接收器的套接字对象( UserB ),并将消息直接发送到UserB。但后来我认识到ServerSocket对象在Java中是不可序列化的。

办法2:

每当建立连接时,接受连接的服务器可以将以下详细信息保存在表中。

代码语言:javascript
复制
 user_id , server_name , server_port 

当某个服务器收到消息时。它从表中获取目标服务器的详细信息,并与目标服务器建立连接(可能是HTTP,因为我们不需要持久化)并推送消息。然后,目标服务器将信息传递给相应的用户。

如何继续执行?还有其他更好的方法来实现它吗。

请不要建议一些第三方图书馆。

EN

回答 1

Software Engineering用户

发布于 2020-02-17 22:10:16

第二种方法听起来比前一种更好,尽管我不会使用它。在服务器上加载大量消息时处理数据库可能很费时。

解决此问题的最佳解决方案是内存数据库,例如实现发布-订阅的Redis。

它将为您节省大量的开发时间,并将表现更好。

如果你真的想自己实现一些东西,我建议在这些服务器前开发一个负载均衡器。

每当用户想要连接时,它都会导航他的消息到某个服务器,并保持它以某种数据结构连接到服务器X。

它将负责簿记并将每条消息导航到相关服务器。

当某个服务器在另一台服务器上从用户X接收到用户Y的消息时,它将把它发送到负载均衡器(或您想要调用它的任何东西),后者将消息路由到正确的服务器。

我认为,在用户和连接到的服务器之间的内存映射中,最好是聊天而不是数据库。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/405348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档