Nodejs实现websocket的4种方式

Nodejs实现websocket的4种方式

alt 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: 测试成功
  • 最后总结

请查看博客文章

http://blog.fens.me/nodejs-websocket/


6 回复

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-websocketfaye-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的方法。wsfaye-websocket-node 都是轻量级且易于使用的库,而 socket.io 则提供了更多的功能和灵活性。选择哪种方式取决于具体的需求和应用场景。

回到顶部