您是否想开发一次可以被许多其他地方使用的软件? 您是否希望Android,IOS或台式机支持您的功能?
在设计开始时,您需要考虑这些事情。 您可能首先想到的是使用html5进行开发。
html5支持WebSocket标准,这是一个很好的新特性,并且许多广泛的浏览器都支持WebSocket标准。
对于某种广播要求,我们可以使用一些客户端插件与服务器进行有效通信。 对于诸如注释之类的轻量级功能,我们需要在我们的应用程序中添加过于繁重的插件。 因此,WebSocket对我们来说是一个更好的解决方案。
最简单的设计
浏览器中的一个javascript WebSocket客户端插件和Spring等WebSocket服务器技术。 在Spring中,您可以创建一个控制器来接收消息并将消息发送到浏览器。 但这是一个世界一流的设计。 它仅用于学习WebSocket技能或做一些非常简单的应用程序。
可以共享的更好的解决方案
对于服务器端,我们可以设计一个独立的层,仅用于连接客户端和传输消息。 该层不需要实现某些业务需求。 因此,该层可以同时被多种业务需求重用,它是一个实时通信层,可以为许多不同的业务需求提供相同的服务。
1,启动浏览器将请求发送到WebSocket服务器,然后连接到WebSocket服务器时,在关闭浏览器之前,该连接没有关闭。
2,向业务服务器发送业务请求,如果用户未登录将被重定向到登录页面登录,否则请求进入服务器,服务器将记录用户信息或从数据库中检索用户信息在用户完成注册后将其记录下来。 该用户将把这条请求消息发送到Message Queue服务器,WebSocket服务器已订阅了此Message Queue的主题。一旦Message Queue Server收到此类消息,WebSocket Server就会收到该消息。 然后,WebSocket服务器将该消息发送到所有正在连接的客户端或特殊客户端。
让我们开始真正的业务需求
我们需要实现评论和聊天功能。 登录用户可以对文章发表评论。 所有用户都可以实时通信。 该功能包括两个模块,一个是面向普通用户的字体页面,另一个是后端管理系统,该系统的管理员可以从后端页面回复某些特殊用户。
实行
1,我们需要设计一个数据库表来记录注册用户或聊天用户,该表有一列存储通信房间号或通信主题。
2,浏览器客户端向业务服务器发送带有一些参数的请求,其中包括用户名和通讯室或通讯主题。
3,从业务服务器检索令牌。 该令牌用于在WebSocket服务器中进行验证。 此令牌需要一些WebSocket Server可以识别的业务信息。
3,浏览器客户端向WebSocket服务器发送另一个请求,并带有该令牌。与WebSocket服务器建立了长连接。
4,浏览器客户端调用Business Server Interface来发送聊天消息,并同时与通信室或通信主题进行请求。
5,业务服务器根据通讯室或通讯主题从数据库中查找用户列表。
6,业务服务器构造队列消息,然后将消息发送到消息队列服务器。
7,WebSocket服务器发送已从Message Queue Server订阅的消息以接收也来自Message Queue Server的用户列表。
后端服务器的实现只需要从接收用户中检索并构造消息,然后发送到Message Queue Server,其他部分是相同的。
From: https://bytes.com/topic/java/insights/969156-good-websocket-design