socket.io 与 ws对比

node.js的websocket库目前比较热门的是ws和socket.io。我们对比一下这两个库。

一、

笔者写这篇文章时,ws的周下载量是4百多万,最近一次更新是11天前,总共98个版本。

socket.io周下载量接近2百万,最近一次更新是三个月前。总共110个版本

从npm上看,使用ws的比socket.io多很多,活跃度差不多。

二、

ws客户端不支持浏览器,需要用户自行封装websocket。

socket.io客户端对浏览器有良好的支持。socket.io客户端封装的websocket请求自带id,服务器可以根据id区分客户端,进行精准推送。

三、

ws和socket.io都可以单独作为websocket服务器,也可以挂到express和koa框架,同时提供web和websocket服务。

四、

笔者简单测试了一下两个库的性能,websocket集成到koa框架,代码如下:

ws服务端:

let server = http.createServer(app.callback());
const wss = new WebSocket.Server({ server });
let count = 0;
let beginTime = Date.now();
wss.on('connection', function connection(ws) {
    ws.on('message', function (data) {
        console.log(data+', count: ', count++);
        if(count === 10000){
            let endTime = Date.now();
            console.log('use time: ', endTime-beginTime);
        }
    });
});
server.listen(4001);

ws客户端:

const WebSocket = require('ws');
for(let i = 0; i<10000;i++){
    let ws = new WebSocket("ws://localhost:4001");
    ws.on('open', function open() {
        ws.send('hello');
    });
}

启5000个客户端时,ws用时12973毫秒。启10000个客户端时,用时19050毫秒。启20000个客户端时,直接报错:

 

socket.io服务端:

let server = http.createServer(app.callback());
let socketIo = new SocketIo(server);
let count = 0;
let beginTime = Date.now();
socketIo.on('connection', function(client){
    client.on('hello', function (data) {
        console.log(data+', count: ', count++);
        if(count === 10000){
            let endTime = Date.now();
            console.log('use time: ', endTime-beginTime);
        }
    });
});
server.listen(4001);

socket.io客户端:

const socketIo = require('socket.io-client');
for(let i = 0;i<10000;i++){
    let socket = new socketIo('http://localhost:4001');
    socket.emit('hello', 'hello');
}

启5000个客户端时,用时29215毫秒,启10000个客户端时,socket.io跑到8千多个就启不了了:

结果是,ws正如它宣称的:速度最快的websocket库之一。速度要比socket.io快一倍。socket.io连接数不足时客户端不会报错,健壮性比ws好。ws客户端在封装时需要考虑连接数不足时的错误处理。

另外,连接数的多少跟服务器有关,线上部署时,需要进行设置,在此不详述。

通过对比,笔者决定选择ws做为node.js的websocket服务器。

笔者关于性能的测试,略显简单,如有不当之处,请指正,谢谢。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值