网站icp备案号怎么查询,根据网站集约化建设的要求,如何防止网站被攻击,惠济区建设局网站WebSocket 是一种在客户端和服务器之间进行实时双向通信的协议。它提供了一种更高效、更可靠的替代方案#xff0c;以替代传统的HTTP请求-响应模式。 WebSocket 的特点包括#xff1a; 双向通信#xff1a;客户端和服务器可以同时发送和接收消息#xff0c;而不像HTTP一样需… WebSocket 是一种在客户端和服务器之间进行实时双向通信的协议。它提供了一种更高效、更可靠的替代方案以替代传统的HTTP请求-响应模式。 WebSocket 的特点包括 双向通信客户端和服务器可以同时发送和接收消息而不像HTTP一样需要等待响应。实时性与HTTP相比WebSocket 提供了更快的响应时间因为它在建立连接之后保持持久连接避免了每次请求都需要重新建立连接的开销。更少的数据传输因为WebSocket 的连接是持久的所以不再需要在每次通信时传输额外的HTTP头部从而减少了通信时的数据量。低延迟和高效性WebSocket 使用二进制协议传输数据相比于文本协议具有更快的速度和更低的延迟。 使用WebSocket 可以实现实时聊天、实时数据更新、多人协同编辑等功能。在Web开发中可以使用WebSocket API 来实现前后端的实时通信同时也有许多流行的JavaScript库和框架如Socket.IO提供了更简单和方便的使用方式。 需要注意的是WebSocket 需要浏览器和服务器双方都支持该协议才能进行通信。目前大多数现代浏览器都支持WebSocket而服务器端需要使用支持WebSocket 的服务器软件或库来处理WebSocket 连接。 实现通过信号量
websocket类
Slf4j
ServerEndpoint(value /ws/live)
Component
public class LiveStreamingWebsocket {private Session session;private Thread thread;OnOpenpublic void open(Session session) throws AuthenticationException, ConnectException {}OnMessagepublic void message(String message, Session session) {if (isOpen) {if (StringUtils.equals(message, start)) {Runnable runnable new LiveThread(message, session);thread new Thread(runnable);thread.start();Signal.stop false;} else if (StringUtils.equals(message, end)) {if (thread.isAlive()) {thread.interrupt();Signal.stop true;log.info(stop);}}}}OnErrorpublic void error(Throwable throwable) {log.error(An error has occurred:{}, throwable.getMessage());
// release();}OnClosepublic void close() {if (isOpen) {release();}}private void release() {}public void sendMessage(String text, boolean async) {log.info(send message text sessionId this.session.getId());try {this.session.getBasicRemote().sendText(text);} catch (IOException e) {log.error(send message error text sessionId this.session.getId());e.printStackTrace();}}
} 线程类
Slf4j
AllArgsConstructor
NoArgsConstructor
public class LiveThread implements Runnable {private String message;private Session session;Overridepublic void run() {while (!Signal.stop) {}}public void sendMessage(String text, boolean async) {log.info(send message text sessionId this.session.getId());try {this.session.getBasicRemote().sendText(text);} catch (IOException e) {log.error(send message error text sessionId this.session.getId());e.printStackTrace();}}
}
信号量类
public class Signal {public static volatile boolean stopfalse;
}
运行后通过输入start和end即可控制流的使用