WebSocket 库 TypeScript:ws 和 Socket.IO – 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

WebSocket 库 TypeScript:ws 和 Socket.IO



WebSocket 是一种协议,可在客户端和服务器之间实现实时双向通信。在 TypeScript/Node.js 生态系统中,最流行的 WebSocket 库是 ws(轻量级)和 Socket.IO(具有额外功能)。在本文中,我们将详细介绍这两个库的安装、基本用法以及 TypeScript 代码示例。



1. ws 库



ws 是一个用于 Node.js 的极简且快速的 WebSocket 库,与 TypeScript 完全兼容。它提供了纯粹的 WebSocket API,没有多余的抽象。



安装

npm install wsnpm install -D @types/ws


在 TypeScript 中创建 WebSocket 服务器

import { WebSocketServer, WebSocket } from 'ws';

const wss = new WebSocketServer({ port: 8080 });

wss.on('connection', (ws: WebSocket) => { console.log('客户端已连接');

// 向客户端发送消息 ws.send('欢迎!');

// 处理传入消息 ws.on('message', (data: Buffer) => { const message = data.toString(); console.log(`收到:${message}`);

// 向所有已连接的客户端发送响应 wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(`回声:${message}`); } }); });

// 处理连接关闭 ws.on('close', () => { console.log('客户端已断开'); });});

console.log('WebSocket 服务器已启动,端口 8080');


TypeScript 客户端代码

const ws = new WebSocket('ws://localhost:8080');

ws.onopen = () => { console.log('连接已建立'); ws.send('你好,服务器!');};

ws.onmessage = (event: MessageEvent) => { console.log(`服务器响应:${event.data}`);};

ws.onclose = () => { console.log('连接已关闭');};


2. Socket.IO 库



Socket.IO 是一个构建在 WebSocket 之上的更高级库。它增加了:

  • 连接断开时的自动重连
  • 支持房间和命名空间(namespaces)
  • 回退机制(如果 WebSocket 不可用,则切换到 HTTP long-polling)
  • 内置事件支持(events)


安装

npm install socket.io socket.io-clientnpm install -D @types/socket.io @types/socket.io-client


使用 Socket.IO 的 TypeScript 服务器

import { Server } from 'socket.io';import http from 'http';

const server = http.createServer();const io = new Server(server, { cors: { origin: '*', methods: ['GET', 'POST'] }});

io.on('connection', (socket) => { console.log(`用户已连接:${socket.id}`);

// 加入房间 socket.on('join_room', (room: string) => { socket.join(room); console.log(`Socket ${socket.id} 已加入房间 ${room}`); });

// 处理自定义事件 socket.on('chat_message', (data: { room: string; message: string }) => { // 向房间内除发送者外的所有人发送消息 socket.to(data.room).emit('chat_message', { userId: socket.id, message: data.message }); });

socket.on('disconnect', () => { console.log(`用户已断开:${socket.id}`); });});

server.listen(3000, () => { console.log('Socket.IO 服务器已启动,端口 3000');});


使用 Socket.IO 的 TypeScript 客户端

import { io, Socket } from 'socket.io-client';

const socket: Socket = io('http://localhost:3000');

socket.on('connect', () => { console.log('已连接到服务器');

// 加入房间 socket.emit('join_room', 'room_1');});

socket.on('chat_message', (data: { us

推荐