"node.js实现websocket的即时通讯详解"的攻略如下:
什么是 WebSocket
WebSocket 是一种在单个 TCP 连接上进行双向通信的网络协议。它使得服务器可以直接向客户端推送数据,而不需要客户端轮询服务器获取数据。
实现 WebSocket 的方法
在 Node.js 中,可以使用 ws
模块来实现 WebSocket。下面是一个基本的 WebSocket 服务端代码:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
console.log('connected');
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('hello from server');
});
这个服务端会监听本地的 8080 端口,当客户端和服务端建立连接时,会打印 connected
。如果服务端收到客户端发送的消息,会在控制台上打印出来。同时,服务端会向客户端发送一条消息 hello from server
。
以下是一个基本的 WebSocket 客户端代码:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
console.log('connected to server');
ws.send('hello from client');
});
ws.on('message', function incoming(data) {
console.log('received: %s', data);
});
ws.on('close', function close() {
console.log('disconnected from server');
});
这个客户端会连接到本地的 8080 端口,当连接成功时,会打印 connected to server
。它会向服务端发送一条消息 hello from client
。如果客户端收到服务端发送的消息,会在控制台上打印出来。最后,客户端会打印 disconnected from server
。
实现实时聊天室
下面是一个基本的实时聊天室的代码示例:
服务端:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
const clients = [];
wss.on('connection', function connection(ws) {
clients.push(ws);
console.log('connected');
ws.on('message', function incoming(message) {
console.log('received: %s', message);
clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
ws.on('close', function close() {
clients.splice(clients.indexOf(ws), 1);
console.log('disconnected');
});
});
这个服务端和之前的基本服务端很相似,唯一的区别是它会将客户端对象存储到 clients
数组中,以便于在有新消息时可以向所有连接到服务器的客户端广播。
当接收到消息时,服务端会遍历 clients
数组,将消息发送给除了当前客户端外的所有客户端。
客户端:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
console.log('connected');
ws.on('message', function incoming(data) {
console.log('received: %s', data);
});
const input = document.getElementById('input');
input.addEventListener('keypress', function(event) {
if (event.keyCode === 13) {
ws.send(input.value);
input.value = '';
}
});
});
ws.on('close', function close() {
console.log('disconnected');
});
这个客户端会连接到本地的 8080 端口,并监听来自服务端的消息。
同时,它也监听用户在页面上输入的消息,并在用户按下回车键时将消息发送到服务端。
总结
以上就是实现 WebSocket 的基本方法,我们也成功地实现了一个实时聊天室。虽然 WebSocket 有很多高级特性和优化方法,但是对于大多数简单的应用场景,以上的实现已经足够了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js实现websocket的即时通讯详解 - Python技术站