如何在服务器端向客户端发送信息?

如何在服务器端向客户端发送信息?,第1张

在“Message”后的框中输入欲发送信息的标题,其下的框中输入正文。如果有必要,选中“URL Button”(网址按钮),在其后的框中输入网站说明,其下的框中输入网站地址。然后,再选是将此信息发送给“Offline Or Online Users”(所有在线和离线的用户),还是只将它发送给“Online Users”(在线用户)。最后按“Broadcast Message”将信息发送出去。“Server Messages History”为以前所发送的所有信息的历史记录,选中相应记录后再按“Delete”按钮即可删除它,按“Copy”键可将它再复制到上面相应栏目中,以便再次发送。服务器端的信息发送后,客户端就会收到信息。

本文通过一个实际的场景来介绍在前后端分离的项目中通过 WebSocket 来实现服务器端主动向客户端发送消息的应用。主要内容如下

Websocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 连接成功后,服务端与客户端可以双向通信。在需要消息推送的场景,Websocket 相对于轮询能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

具体如下特点

在客户端的列表数据中有个 status 字段,服务器端需要花费较长的时间进行处理,处理完成后才会更新对应数据的 status 字段值,通过 Websocket 的处理流程如下:

通过注入 ServerEndpointExporter 类,用于在项目启动的时候自动将使用了 @ServerEndpoint 注解声明的 Websocket endpoint 注册到 WebSocketContainer 中。

为什么增加一个 ServerEndpointExporter Bean,并通过在一个类上增加 @ServerEndpoint 和 @Component 注解就可以实现服务器端 Websocket 功能,这里简单解析一下。

java 定义了一套 javax.servlet-api, 一个 HttpServlet 就是一个 HTTP 服务。java websocket 并非基于 servlet-api 简单扩展, 而是新定义了一套 javax.websocket-api。

一个 websocket 服务对应一个 Endpoint。与 ServletContext 对应, websocket-api 也定义了 WebSocketContainer, 而编程方式注册 websocket 的接口是继承自 WebSocketContainer 的 ServerContainer。

一个 websocket 可以接受并管理多个连接, 因此可被视作一个 server。主流 servlet 容器都支持 websocket, 如 tomcat, jetty 等。看 ServerContainer api 文档, 可从 ServletContext attribute 找到 ServerContainer。

首先建议使用一个线程向所有客户端发送消息在写一个方法发送消息,方法里面需要消息和socket参数ThreadtSend=newThread(SendAll)privatevoidSendAll(){//遍历所有的Socket,调用Send(stringmsg,Socketsocket)方法//不知道你的Socket放到哪里,如果放到集合就遍历集合挨个调用}privatevoidSend(stringmsg,Socketsocket){byte[]buffer=Encoding.Default.GetBytes(msg)socket.Send(buffer)}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/292596.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-24
下一篇2023-04-24

发表评论

登录后才能评论

评论列表(0条)

    保存