LoginSignup
1
3

More than 5 years have passed since last update.

Socket.IOの通信速度を測ってみる。

Last updated at Posted at 2017-11-26

結果

このやり方だとローカルで130Mbps~140Mbps

追記 環境による差異が大きいようです。

  • Windows 10(当記事の検証PC) 135Mbps前後
  • Hyper-V上のUbuntu Server 100Mbps前後
  • 開発用ノートPC(Arch Linux) 3200Mbps前後
  • 友人のMac 1200Mbps前後

同じLinuxでもバラバラだったりするのが非常に謎ですが、何かがオーバーヘッドになってることは確かなようです。

検証

  • Windows 10
  • そこそこ速いSSD
  • Node.js v8.9.1
  • 約100MBのmp3ファイル

サーバ側

server.js
var server = require('http').createServer(response);
var io     = require('socket.io')(server);
var fs     = require('fs');

function response(req, res){
// HTTP
}

function socketio(socket){
    socket.on('starttest', function(data){
        fs.readFile('sample.mp3', function(err, data){
            var start = (new Date()).getTime();
            io.emit('mp3data', { 'mp3':data, 'start':start } )
        });
    });
}

io.on('connection', socketio);
server.listen(3000);
console.log('Server started on 3000');

クライアント側から着信を受けた後、送信時のタイムスタンプとデータをSocketIOで送ります。

クライアント側

client.js
var socket = require('socket.io-client').connect('http://localhost:3000');
var fs     = require('fs');
socket.on('connect', function(){
    console.log('Connected');
});

socket.on('mp3data', function(data){
    var end = (new Date()).getTime();
    var sec = (end - data.start) / 1000;
    var bps= Math.round(data.mp3.length / sec);
    console.log((bps * 8 / 1000 / 1000) + 'Mbps');
});

process.stdin.on('data', function(data){
        socket.emit('starttest', {msg: data});
});

コンソールに適当に入力するとサーバ側に発信します。受信が終わったら計算をして出力します。

感想

自分の実装が悪いのかSocket.IOが悪いのかWebsocketの限界なのかわかりませんが、どんな書き方をしてもこれ以上パフォーマンスは上がりませんでした。何かあればご指摘ください。ファイルの送受信は素直にHTTPを使ったほうがいいような気もします。

何かあればコメント欄かTwitter @kznr_lukまでお願い致します。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3