WebSocket
WebSocket 是一种全双工通信协议,允许客户端和服务器之间建立持久连接,实现实时数据传输。以下是 WebSocket 的具体操作和实现步骤:
WebSocket 的基本操作流程
-
建立连接:
- 客户端通过 HTTP 升级请求(Upgrade: websocket)与服务器建立 WebSocket 连接。
- 服务器响应并切换协议,从 HTTP 切换到 WebSocket。
-
双向通信:
- 建立连接后,客户端和服务器可以随时互相发送消息,而无需重复建立连接。
-
关闭连接:
- 任意一方可以主动关闭连接,另一方会收到关闭通知。
WebSocket 的具体实现
1. 后端实现 WebSocket 服务
以下是基于 Java Spring Boot 的 WebSocket 示例:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/ws").setAllowedOrigins("*");
}
}
// 自定义 WebSocket 处理器
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("连接已建立:" + session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
System.out.println("收到消息:" + message.getPayload());
session.sendMessage(new TextMessage("服务器已收到消息:" + message.getPayload()));
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("连接已关闭:" + session.getId());
}
}
2. 前端实现 WebSocket 客户端
以下是基于 JavaScript 的 WebSocket 客户端代码:
// 创建 WebSocket 连接
const socket = new WebSocket("ws://localhost:8080/ws");
// 连接成功回调
socket.onopen = () => {
console.log("WebSocket 连接已建立");
socket.send("Hello, Server!");
};
// 接收消息回调
socket.onmessage = (event) => {
console.log("收到服务器消息:", event.data);
};
// 连接关闭回调
socket.onclose = () => {
console.log("WebSocket 连接已关闭");
};
// 连接错误回调
socket.onerror = (error) => {
console.error("WebSocket 错误:", error);
};
WebSocket 的应用场景
- 实时聊天:如即时通讯应用(微信、Slack)。
- 实时通知:如股票价格更新、系统消息推送。
- 在线协作:如多人协作编辑文档、在线白板。
- 实时游戏:如多人在线游戏的状态同步。
面试中的常见问题
-
WebSocket 与 HTTP 的区别?
- WebSocket 是全双工通信协议,支持实时数据传输。
- HTTP 是请求-响应模式,通信需要多次建立连接。
-
WebSocket 如何保证数据安全?
- 使用
wss://(WebSocket Secure)协议,通过 TLS 加密通信。
- 使用
-
如何处理 WebSocket 的高并发?
- 使用消息队列(如 Kafka)分流消息。
- 使用分布式架构,将连接分配到多个 WebSocket 服务器。
通过以上实现和理解,可以应对 WebSocket 相关的面试问题,并掌握其在实际项目中的应用。