nodejsで非常に単純なWebSocketサーバーを作成しようとしていますが、問題が発生しています。ブラウザでは、WebSocket.onclose関数が起動される唯一の関数です(onopen、onmessage、およびonerrorは起動されません)。Chrome7とFireFox4でテストしました。これが私のサーバーコードです:
var http = require('http')、 net = require('net')、 crypto = require('crypto'); var server = http.createServer(function(req、res){ console.log(req); }); server.on('connection'、function(stream){ stream.setEncoding('utf8'); stream.setTimeout(0); stream.setNoDelay(true); stream.on('data'、function(data){ var sec1_regex = /Sec-WebSocket-Key1:(.*)/g; var sec2_regex = /Sec-WebSocket-Key2:(.*)/g; var origin_regex = / Origin:(。*)/ g; var protocol_regex = / Sec-WebSocket-プロトコル:(。*)/ g; console.log(stream); console.log("****着信****\ r \ n" +データ); var key1 = sec1_regex.exec(data)[1]; var num1 = parseInt(key1.match(/ \ d / g).join(''))/(key1.match(/ \ s / g).length-1); console.log( "num1:" + num1); var key2 = sec2_regex.exec(data)[1]; var num2 = parseInt(key2.match(/ \ d / g).join(''))/(key2.match(/ \ s / g).length-1); console.log( "num2:" + num2); var lastbytes = data.slice(-8); var origin = origin_regex.exec(data)[1]; var md5 = crypto.createHash('md5'); md5.update(String.fromCharCode(num1 >> 24&0xFF、num1 >> 16&0xFF、num1 >> 8&0xFF、num1&0xFF)); md5.update(String.fromCharCode(num2 >> 24&0xFF、num2 >> 16&0xFF、num2 >> 8&0xFF、num2&0xFF)); md5.update(lastbytes); var response = "HTTP / 1.1101WebSocketプロトコルハンドシェイク\r\ nアップグレード:WebSocket \ r \ n接続:アップグレード\ r \ nSec-WebSocket-Origin:" +オリジン+"\r \ nSec-WebSocket-場所:ws://127.0.0.1:8124 / \ r \ n" + md5.digest('binary'); stream.write(response、'binary'); console.log("****送信****\ r \ n" +応答); }); }); server.listen(8124、 '127.0.0.1');
そして私のクライアントコード:
関数connect(){ if(window.WebSocket){ 試す { ws = new WebSocket('ws://127.0.0.1:8124'); ws.onopen = function(){ alert( "open"); }; ws.onclose = function(){ alert( "close"); }; ws.onerror = function(err){ alert( "err!"); }; ws.onmessage = function(){ alert('メッセージ'); }; } catch(ex){ alert(ex); } } }