WebSocket

WebSocket 是一种全双工通信协议,允许客户端和服务器之间建立持久连接,实现实时数据传输。以下是 WebSocket 的具体操作和实现步骤:


WebSocket 的基本操作流程

  1. 建立连接

    • 客户端通过 HTTP 升级请求(Upgrade: websocket)与服务器建立 WebSocket 连接。
    • 服务器响应并切换协议,从 HTTP 切换到 WebSocket。
  2. 双向通信

    • 建立连接后,客户端和服务器可以随时互相发送消息,而无需重复建立连接。
  3. 关闭连接

    • 任意一方可以主动关闭连接,另一方会收到关闭通知。

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 的应用场景

  1. 实时聊天:如即时通讯应用(微信、Slack)。
  2. 实时通知:如股票价格更新、系统消息推送。
  3. 在线协作:如多人协作编辑文档、在线白板。
  4. 实时游戏:如多人在线游戏的状态同步。

面试中的常见问题

  1. WebSocket 与 HTTP 的区别?

    • WebSocket 是全双工通信协议,支持实时数据传输。
    • HTTP 是请求-响应模式,通信需要多次建立连接。
  2. WebSocket 如何保证数据安全?

    • 使用 wss://(WebSocket Secure)协议,通过 TLS 加密通信。
  3. 如何处理 WebSocket 的高并发?

    • 使用消息队列(如 Kafka)分流消息。
    • 使用分布式架构,将连接分配到多个 WebSocket 服务器。

通过以上实现和理解,可以应对 WebSocket 相关的面试问题,并掌握其在实际项目中的应用。