socket.ioのwebsocket接続がdisconnected、connectedを繰り返してしまう
と、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"
…
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対応してほしいものです。