socket.ioのwebsocket接続がdisconnected、connectedを繰り返してしまう


21 Apr 01:29:34 - Initializing client with transport "websocket"
21 Apr 01:29:34 - Client 37915311800315976 connected
21 Apr 01:29:56 - Client 37915311800315976 disconnected
21 Apr 01:30:02 - Initializing client with transport "websocket"
21 Apr 01:30:02 - Client 12511056219227612 connected
21 Apr 01:30:23 - Client 12511056219227612 disconnected
21 Apr 01:30:30 - Initializing client with transport "websocket"
と、disconnected、connectedを繰り返す。
websocketは接続を維持するプロトコルじゃなかったのか。
しかも、よく見ると
 約22秒間接続 → 切れる → 約6秒後再接続
と決まったパターンの繰り返し。
なにが悪いんだろう。むしろ正常なのか。それもわからない。websocketビギナー。

サーバ側のコード(socket.io版)
var http = require('http'),
    io = require('socket.io');

server = http.createServer(function(req, res){
    console.log('[http] on connection ' + connect_count);
    res.writeHead(200, {'Content-Type': 'text/html'});_
    res.end('<h1>Hello world</h1>');_
    }); 
server.listen(8000);

var socket = io.listen(server);
    socket.on('connection', function(client){
    client.on('message',    function(){ console.log('on message ');})
    client.on('disconnect', function(){ console.log('on disconnect ');})
});
クライアント側(ブラウザ)のコード

(このHTMLと中でロードするJSは別で立てたApacheが返している)

<script src="http://motoki.local/socket-io/socket.io.js"></script>
<script> 
  var socket = new io.Socket('motoki.local',{port:8000});
  socket.port = 8000;
  socket.connect();
  socket.on('connect',    function(){console.log('connect');})
  socket.on('message',    function(){console.log('message');})
  socket.on('disconnect', function(){console.log('disconnect');})
</script>

他のコードで試してみる

サーバ側を、socket.ioでなくで、
クライアント側も、socket.io.jsでなくブラウザネイティブのWebSocketで試してみる。

クライアント側(ブラウザのコード)
<html>
<body>
<script type="text/javascript">

var connect = function() {
    conn = new WebSocket("ws://motoki.local:8000/test");
};

window.onload = connect;
</script>
</body>
サーバ側(node-websocket-server版)
var ws      = require('./node-websocket-server/lib/ws/server');
var server  = ws.createServer();

//var ws = require("websocket-server");
server.addListener("connection", function(connection){

  connection.addListener("close", function(){
    console.log('client close');
  });
});
server.addListener("close", function(connection){
    console.log('close');
}); 

server.listen(8000);

うーん、ちゃんと接続切れない。原因不明。

そういえばNOD32がのHTTPチェックがきいていた。

でもこの前はsendが送れなかっただけのはず(その時はsocket.ioじゃなかったけど)
http://d.hatena.ne.jp/motsat/20110411/1302530960
一応今回もHTTPチェックを解除。
そして、socket.io版のコードを試す。

接続切れなくなった。


不思議なことが起こったら、NOD32を疑うことからはじめよう。忘れていました。
NOD32さんはHTML5未対応で、HTTPでのコネクション張ったのに、中ではおかしな(WebSocket)なやりとりしているから怒っているんだろうか。
ブラウザだけで無く、ウイルスチェックソフトもHTML5対応してほしいものです。