Socket 使用总结
Socket 是一种网络通信协议,很多高级功能都需要它。
当前常用的socket库有以下几个
-
webSocket
-
socket.io
-
socket.io.client
websocket 客户端的简单用法
var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data);
ws.close();
};
ws.onclose = function(evt) {
console.log("Connection closed.");
};
webSocket 客户端常用的API
WebSocket
构造函数
var ws = new WebSocket('ws://localhost:8080');
webSocket.readyState
switch (ws.readyState) {
case WebSocket.CONNECTING:
// do something
break;
case WebSocket.OPEN:
// do something
break;
case WebSocket.CLOSING:
// do something
break;
case WebSocket.CLOSED:
// do something
break;
default:
// this never happens
break;
}
webSocket.onopen
ws.onopen = function () {
ws.send('Hello Server!');
}
也可以使用
ws.addEventListener('open', function (event) {
ws.send('Hello Server!');
});
webSocket.onclose
ws.onclose = function(event) {
var code = event.code;
var reason = event.reason;
var wasClean = event.wasClean;
// handle close event
};
ws.addEventListener("close", function(event) {
var code = event.code;
var reason = event.reason;
var wasClean = event.wasClean;
// handle close event
});
webSocket.onmessage
ws.onmessage = function(event) {
var data = event.data;
// 处理数据
};
ws.addEventListener("message", function(event) {
var data = event.data;
// 处理数据
});
webSocket.send()
ws.send('your message');
Socket.IO
服务端 初始化
const app = require('express')();
const server = require('http').Server(app);
const options = {}
const io = require('socket.io')(server,options);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
客户端
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Socket.IO server options
配置
服务端
const redisClient = require("redis").createClient();
const io = require('socket.io')(httpServer,{
path: '/orderList/',
//适配器
adapter: require("socket.io-redis")({
pubClient: redisClient,
subClient: redisClient.duplicate()
}),
connectTimeout: 4500,
//过期时间
pingTimeout: 3000,
//链接时间
pingInterval: 25000,
upgradeTimeout: 10000,
//最大传输数据
maxHttpBufferSize: (1MB) 1e6,
//跨域
cors: {
origin: ["https://example.com", "https://dev.example.com"],
allowedHeaders: ["my-custom-header"],
credentials: true
},
//cookie
cookie: {
name: "my-cookie",
httpOnly: true,
sameSite: "strict",
maxAge: 86400
},
//allowEIO3
allowEIO3: true, // false by default
});
客户端
const socket = io('http://example.com',{
path: '/orderList/'
});
socket.io的基本用法
io.on('connection', socket => {
socket.emit('request', /* … */); // emit an event to the socket
io.emit('broadcast', /* … */); // emit an event to all connected sockets
socket.on('reply', () => { /* … */ }); // listen to the event
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)