网站备案的主体变更怎么做,企查查企业信息查询网页版,大港网站建设公司,化工课设代做网站WebSocket是一种实现全双工通信的网络技术标准#xff0c;它允许在用户的浏览器和服务器之间进行持久的、双向的通信。以下是对WebSocket的具体介绍#xff1a;
实时性#xff1a;与传统HTTP请求相比#xff0c;WebSocket提供了更高效的实时数据交换方式。一旦建立连接它允许在用户的浏览器和服务器之间进行持久的、双向的通信。以下是对WebSocket的具体介绍
实时性与传统HTTP请求相比WebSocket提供了更高效的实时数据交换方式。一旦建立连接客户端与服务端可以同时相互发送信息而不需要像HTTP那样每次请求都要重新建立连接。持久连接WebSocket建立在TCP协议之上它使用一次“握手”来建立连接此后便可以在客户端和服务器之间保持一个持久的连接状态直到其中一方主动关闭连接。低延迟由于WebSocket支持长连接和双向通信它可以显著减少网络延迟尤其适用于需要快速响应的场景例如在线游戏、实时通知等。轻量级虽然WebSocket基于HTTP协议但它有自己的专门协议这使得它在传输效率上更高头部信息更小减少了额外的数据传输开销。兼容性WebSocket协议得到了现代浏览器的广泛支持并且由W3C定为标准。同时它也通过RFC 6455和RFC 7936被IETF确定为标准。适用场景WebSocket特别适用于那些需要服务器主动向客户端推送数据的应用场景如聊天室、实时监控图表更新展示等。
首先创建客户端WebSocket: WebSocketClient.html
!DOCTYPE html
html langen
headmeta charsetUTF-8titleWS_Client/title
/head
body
input idmsg typetext
button onclicksend()发送消息/button
/body
script//连接WebSocket 服务器const clientId Math.random().toString(36).substr(2);const websocket new WebSocket(ws://localhost:8080/ws/ clientId);//监听连接建立成功websocket.onopen function (){console.log(WebSocket建立连接成功……)}//监听收到服务端消息websocket.onmessage function (event){console.log(event.data);}//发送消息function send(){websocket.send(document.getElementById(msg).value);}//监听窗口关闭事件当窗口关闭时主动去关闭webSocket连接window.onbeforeunload function (){websocket.close();}
/script
/html
现在编写服务端WebSocketServe:
引入相关依赖 !-- websocket --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId/dependency
编写WebSocketServer服务端
package net.wanho.webSocket;import org.springframework.stereotype.Component;import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;Component
ServerEndpoint(/ws/{cid})
public class WebSocketServer {//存放会话对象private static MapString, Session sessionMap new HashMap();/*** 监听连接建立成功*/OnOpenpublic void onOpen(Session session, PathParam(cid) String cid){System.out.println(客户端 cid 建立连接……);sessionMap.put(cid,session);}/*** 监听收到客户端消息*/OnMessagepublic void onMessage(String msg,PathParam(cid) String cid){System.out.println(这是来自于客户端 cid 的消息 msg);}/*** 监听连接关闭* param cid*/OnClosepublic void onClose(PathParam(cid) String cid){System.out.println(连接断开 cid);sessionMap.remove(cid);}/*** 群发消息*/public void sendToAllClient(String msg){CollectionSession sessions sessionMap.values();for (Session session : sessions) {try {//服务器向客户端发送消息session.getBasicRemote().sendText(msg);} catch (IOException e) {e.printStackTrace();}}}
}编写WebSocket配置类
/*** WebSocket配置类用于注册WebSocket服务端组件*/
Configuration
public class WebSocketConfig {Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();}
}编写定时任务用于向客户端发送信息
Component
public class MyWebSocketTask {Resourceprivate WebSocketServer webSocketServer;/*** 通过WebSocket每隔5s向客户端发送信息*/Scheduled(cron 0/3 * * * * ?)public void sendMessageToClient(){String format DateTimeFormatter.ofPattern(HH:mm:ss).format(LocalDateTime.now());webSocketServer.sendToAllClient(这是来自服务端的消息 format);}
}在启动类开启定时任务
SpringBootApplication
EnableScheduling //开启定时任务
public class ExcelProjectApplication {public static void main(String[] args) {SpringApplication.run(ExcelProjectApplication.class, args);}}测试结果