Nodejs实现websocket的4种方式
Nodejs实现websocket的4种方式
前言:
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。在WebSocket API中,浏览器和服务器只需要要做一个握手(handshaking)的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
WebSocket是一个通信的协议,分为服务器和客户端。服务器放在后台,保持与客户端的长连接,完成双方通信的任务。客户端一般都是实现在支持HTML5浏览器核心中,通过提供JavascriptAPI使用网页可以建立websocket连接。Java实现的案例,请参考:Java现实WebSocket
今天让我们来看看在nodejs中,如何实现websocket的通信。
文章目录:
- 为什么用Nodejs
- node-websocket-server:测试失败
- node-websocket:测试成功
- faye-websocket-node: 测试成功
- socket.io: 测试成功
- 最后总结
请查看博客文章
Nodejs实现websocket的4种方式
前言:
WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。在 WebSocket API 中,浏览器和服务器只需要做一个握手(handshaking)的动作,然后浏览器和服务器之间就形成了一条快速通道。两者之间可以直接数据互相传送。
WebSocket 是一种通信的协议,分为服务器和客户端。服务器放在后台,保持与客户端的长连接,完成双方通信的任务。客户端一般都是实现在支持 HTML5 浏览器核心中,通过提供 JavaScript API 使用网页可以建立 WebSocket 连接。有关 Java 实现的案例,请参考 Java 实现 WebSocket。
今天让我们来看看在 Node.js 中,如何实现 WebSocket 的通信。
文章目录:
- 为什么用 Node.js
- node-websocket-server: 测试失败
- node-websocket: 测试成功
- faye-websocket-node: 测试成功
- socket.io: 测试成功
- 最后总结
为什么用 Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它使用了一个事件驱动、非阻塞 I/O 模型,使其轻量又高效。Node.js 的这些特性使得它非常适合用来开发 WebSocket 服务器。由于 WebSocket 需要处理大量的并发连接,Node.js 的异步特性可以很好地应对这种场景。
node-websocket-server: 测试失败
node-websocket-server
是一个较早的 WebSocket 库,但现在已经不再维护。因此,我们不会深入讨论它,而是直接跳过。
node-websocket: 浆测试成功
node-websocket
是一个简单易用的 WebSocket 库。下面是一个简单的例子:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
console.log('Client connected');
ws.on('message', message => {
console.log(`Received: ${message}`);
ws.send(`Hello, you sent -> ${message}`);
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
这段代码创建了一个 WebSocket 服务器,并监听端口 8080。当有客户端连接时,服务器会打印一条消息并处理客户端发送的消息。
faye-websocket-node: 测试成功
faye-websocket-node
是另一个轻量级的 WebSocket 库。下面是一个简单的例子:
const WebSocket = require('faye-websocket');
const http = require('http');
const server = http.createServer((req, res) => {
if (WebSocket.isWebSocket(req)) {
const ws = new WebSocket(req, res);
ws.on('message', message => {
console.log(`Received: ${message.data}`);
ws.send(`Hello, you sent -> ${message.data}`);
});
ws.on('close', () => {
console.log('Client disconnected');
});
} else {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Welcome to the WebSocket server\n');
}
});
server.listen(8080, () => {
console.log('Server started on port 8080');
});
这段代码同样创建了一个 WebSocket 服务器,并监听端口 8080。当有客户端连接时,服务器会打印一条消息并处理客户端发送的消息。
socket.io: 测试成功
socket.io
是一个功能强大的 WebSocket 库,它不仅支持 WebSocket,还支持其他多种传输方式。下面是一个简单的例子:
const io = require('socket.io')(8080);
io.on('connection', socket => {
console.log('Client connected');
socket.on('message', message => {
console.log(`Received: ${message}`);
socket.emit('response', `Hello, you sent -> ${message}`);
});
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
这段代码创建了一个 WebSocket 服务器,并监听端口 8080。当有客户端连接时,服务器会打印一条消息并处理客户端发送的消息。
最后总结
以上介绍了四种在 Node.js 中实现 WebSocket 的方法。每种方法都有其特点和适用场景。node-websocket
和 faye-websocket-node
都比较轻量,适合简单的应用场景。而 socket.io
功能强大,支持多种传输方式,适用于复杂的应用场景。
请查看完整博客文章:Node.js 实现 WebSocket
看标题以为讲怎么实现websocket server
faye-websocket-node 和 socket.io比,真心不好用
虽然没看过源代码,不过faye-websocket-node,是产品级的模块,各项指标都应该是非常不错的。
按照协议去实现就行了,Google出来讲原理的文章比讲实践的还多。
Nodejs实现websocket的4种方式
WebSocket是一种允许在浏览器和服务器之间进行实时双向通信的技术。本文将介绍四种在Node.js中实现WebSocket的方式,并附上简单的示例代码。
1. node-websocket-server (测试失败)
该库已经不再维护,因此不推荐使用。虽然如此,这里仍列出一些示例代码以供参考:
const WebSocketServer = require('websocket').server;
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello, world!');
});
server.listen(8080, () => {
console.log('Listening on http://localhost:8080');
});
wsServer = new WebSocketServer({
httpServer: server
});
wsServer.on('request', function(req) {
const connection = req.accept(null, req.origin);
connection.sendUTF('Hello, client!');
});
2. ws (测试成功)
ws
是一个流行的WebSocket库,广泛用于生产环境。
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('Hello, client!');
});
3. faye-websocket-node (测试成功)
faye-websocket-node
是另一个轻量级的选择,适用于需要灵活性的场景。
const WebSocket = require('faye-websocket');
const http = require('http');
const server = http.createServer();
server.on('upgrade', function upgrade(request, socket, head) {
if (WebSocket.isWebSocket(request)) {
const ws = new WebSocket(request, socket, head);
ws.on('message', function(event) {
console.log('received: %s', event.data);
});
ws.send('Hello, client!');
}
});
server.listen(8080, () => {
console.log('Listening on http://localhost:8080');
});
4. socket.io (测试成功)
socket.io
提供了更丰富的功能,支持多种传输方式,如WebSocket、xhr-polling等。
const io = require('socket.io')(8080);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.emit('welcome', 'Hello, client!');
});
总结
以上介绍了四种在Node.js中实现WebSocket的方法。ws
和 faye-websocket-node
都是轻量级且易于使用的库,而 socket.io
则提供了更多的功能和灵活性。选择哪种方式取决于具体的需求和应用场景。