欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > WebSocket

WebSocket

2025/5/6 8:01:54 来源:https://blog.csdn.net/qwelllll/article/details/147671218  浏览:    关键词:WebSocket

WebSocket 是基于 TCP 的一种新的网络协议,可以实现浏览器与服务器之间实时双向的通信

HTTP通信是单向的,基于请求响应模式(先请求,后响应)

 应用场景

  • HTTP协议稳定易实现,大部分Web开发后台都没有主动发送数据给前端的需求

  • WebSocket协议相对复杂,维护长连接也需要增加服务器资源开销,还要处理连接端开后重连问题

因此WebSocket并不能取代HTTP,它只适合在高实时的场景,需要服务器给客户端主动推送数据

 

 

package com.websocket;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;/*** WebSocket配置类,用于注册WebSocket的Bean*/
@Configuration
public class WebSocketConfiguration {//ServerEndpointExporter注册标注了@ServerEndpoint的对象到IOC容器中@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}

 

package com.websocket;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;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.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端。*/
@Component
@Slf4j
@ServerEndpoint("/ws/{cid}")
public class WebSocketServer {//存放会话对象private static Map<String, Session> sessionMap = new ConcurrentHashMap();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("cid") String cid) {System.out.println("客户端:" + cid + "建立连接");sessionMap.put(cid, session);}/*** 连接关闭调用的方法* @param cid*/@OnClosepublic void onClose(@PathParam("cid") String cid) {System.out.println("连接断开:" + cid);sessionMap.remove(cid);}/*** 监听客户端发送过来的消息* @param message 客户端发送过来的消息* @param cid 客户端ID*/@OnMessagepublic void onMessage(String message, @PathParam("cid") String cid) {System.out.println("收到来自客户端:" + cid + "的信息:" + message);}/*** 群发消息* @param message*/public void sendToAllClient(String message) {Collection<Session> sessions = sessionMap.values();for (Session session : sessions) {try {//服务器向客户端发送消息session.getBasicRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词