Socket.IO 的使用
Socket.IO 的使用
概述
Socket.IO 是一个用于实时双向通信的 JavaScript 库。它允许在客户端和服务器之间建立实时的、基于事件的通信通道。
Socket.IO 提供了一个简单且灵活的 API,可用于在浏览器和服务器之间传输实时数据。它解决了传统的基于 HTTP 请求-响应模型的限制,允许服务器主动向客户端发送消息,而不需要客户端先发出请求。这使得 Socket.IO 成为构建实时应用程序、聊天应用、多人游戏、实时分析和协作工具等的理想选择。
特性
-
实时性:通过建立持久连接,实现实时的双向通信,服务器和客户端可以随时发送消息和事件。
-
跨平台:Socket.IO 可以在各种平台上使用,包括浏览器、移动设备和服务器。
-
自动回退:如果浏览器或网络环境不支持 WebSocket,Socket.IO 会自动降级为其他传输机制,以保证在各种环境下的兼容性。
-
事件驱动:Socket.IO 使用基于事件的编程模型,通过触发和监听事件来实现双向通信。
-
客户端库支持:Socket.IO 提供了用于浏览器和移动设备的客户端库,使得在客户端使用 Socket.IO 变得简单和便捷。
-
可靠性:Socket.IO 具有自动重连和消息队列等机制,以确保可靠的消息传递和连接恢复。
开始
服务端
简单示例
import { createServer } from "http";
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer);
io.on("connection", (socket) => {
console.log('一名用户已连接');
socket.on("hello", function (data) {
socket.emit("hello", {
ID: socket.id
});
})
socket.on('ping', (timestamp) => {
socket.emit('pong', timestamp);
});
socket.on('disconnect', function () {
console.log("一名用户已离开");
console.log(io.engine.clientsCount);
})
});
httpServer.listen(3000, () => {
console.log("socket.io server started at port 3000");
});
用法
io.on("connection", (socket) => {
socket.emit("request" /* … */); // 向客户端发送消息
io.emit("broadcast" /* … */); // 向所有客户端发送消息
socket.on("reply", () => {/* … */}); // 监听客户端消息
io.sockets.to("/* roomid */").emit("update" /* … */); // 向指定房间发送消息
socket.join("/* roomid */"); // 加入房间
socket.leave("/* roomid */"); // 离开房间
io.of("/").adapter.rooms["/* roomid */"]; // 获取房间信息
});
客户端
import { io } from "./js/socket.io.esm.min.js";
export const socket = io("ws://localhost:3000");
//export const socket = io("ws://example.com");
export function getPing(): void {
socket.emit("ping", Date.now());
socket.on("pong", (timestamp) => {
const latency = Date.now() - timestamp;
console.log(`Latency: ${latency}ms`);
});
}
漫思