Windows 带有node.js的WebSocket-“;“垃圾”;数据包捕获和套接字重置
最近我在使用WebSocket时遇到了很多问题。我知道如何使用它们,而且我以前也成功地使用过它们,但无论如何,应该起作用的东西都不起作用。我在Windows7上使用node.js v0.10.26。我尝试过各种方法(请参见此处),但现在我只想关注我正在使用“websocket”(websocket)创建的服务器。这是服务器:Windows 带有node.js的WebSocket-“;“垃圾”;数据包捕获和套接字重置,windows,node.js,network-programming,websocket,network-protocols,Windows,Node.js,Network Programming,Websocket,Network Protocols,最近我在使用WebSocket时遇到了很多问题。我知道如何使用它们,而且我以前也成功地使用过它们,但无论如何,应该起作用的东西都不起作用。我在Windows7上使用node.js v0.10.26。我尝试过各种方法(请参见此处),但现在我只想关注我正在使用“websocket”(websocket)创建的服务器。这是服务器: var ws = require('websocket').server var http = require('http') var server = http.cre
var ws = require('websocket').server
var http = require('http')
var server = http.createServer(function(request, response) {
console.log("connection received for "+request.url)
response.writeHead(404)
response.end()
})
server.listen(8080, function() {
console.log("now listening")
})
wsServer = new ws({httpServer:server, autoAcceptConnections: false})
wsServer.on('request', function(request) {
console.log("got request")
var connection = request.accept('a', request.origin)
console.log("got connection")
connection.on('message', function(message) {
console.log("got message: "+message)
})
connection.on("close", function() {
console.log("closed")
})
connection.on('error', function(e) {
console.log('Error: '+ e.stack)
})
})
客户:
var ws = require('websocket').client
client = new ws
client.on('connectFailed', function(error) {
console.log('Connect Error: ' + error.toString());
});
client.on('connect', function(connection) {
console.log('WebSocket client connected')
connection.on('error', function(error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
} else {
console.log("Received: '" + message + "'");
}
});
connection.sendUTF("test sending");
});
client.connect('ws://localhost:8080/', 'a');
<script>
var ws = new WebSocket('ws://localhost:8080/', 'a')
ws.onopen = function() {
console.log('WebSocket client connected')
ws.send('testing')
}
ws.onerror = function(e) {
console.log(e)
}
ws.onmessage = function(m) {
console.log(m.data)
}
ws.onclose = function() {
console.log('Connection Closed')
}
</script>
服务器输出:
now listening
got request
got connection
Error: Error: read ECONNRESET
at errnoException (net.js:904:11)
at TCP.onread (net.js:558:19)
closed
客户端输出:
WebSocket client connected
Connection Closed
Rawcap输出:
¡²ÃÔ ÿÿ eS:Üm
’Ø 4 4E 4â@ € Ášáª € J4 ÿ×S:Üm
–À 4 4E 4ã@ € Áš÷“Sá«€ ¿¾ ÿ×S:Üm
–À ( (E (ä@ € Ášá«÷“TP – S:Üm
ªH Ü ÜE Üå@ € Ášá«÷“TP ± GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 6ilNFU9aUzOnlvL8+QUcVQ==
Host: localhost:8080
Sec-WebSocket-Protocol: a
S:Üm
ªH ( (E (æ@ € Áš÷“Tá_P ã S:Üm
ɉ Ä ÄE Äç@ € Áš÷“Tá_P } HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: cgLNQgJeCA0LXM2p8Mw2TMVq8Pc=
Sec-WebSocket-Protocol: a
S:Üm
ɉ ( (E (è@ € Ášá_÷“ðP G S:Üm
àù ( (E (é@ € Ášá_÷“ñP F S:Üm
àù ( (E (ê@ € Ášá_÷“ñP E S:Üm
äá ( (E (ë@ € Ášá`÷“ñP ` S:Üm
äá ( (E (ì@ € Áš÷“ðá_P G S:Üm
äá ( (E (í@ € Ášá_á_P x3
我并不总是遇到“EconReset”错误——这似乎只是偶尔发生。其他时候,在连接和关闭之间大约有15到20秒没有任何事情发生。对我来说,rawcap输出看起来真的很可疑——里面有很多看起来像垃圾的东西。我在环回接口上看到的唯一其他流量是一些upnp的东西,但这些垃圾看起来与upnp无关
我还在chrome 33.0.1750.149 m上与客户端的浏览器websocket会话中尝试了这一点:
var ws = require('websocket').client
client = new ws
client.on('connectFailed', function(error) {
console.log('Connect Error: ' + error.toString());
});
client.on('connect', function(connection) {
console.log('WebSocket client connected')
connection.on('error', function(error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
} else {
console.log("Received: '" + message + "'");
}
});
connection.sendUTF("test sending");
});
client.connect('ws://localhost:8080/', 'a');
<script>
var ws = new WebSocket('ws://localhost:8080/', 'a')
ws.onopen = function() {
console.log('WebSocket client connected')
ws.send('testing')
}
ws.onerror = function(e) {
console.log(e)
}
ws.onmessage = function(m) {
console.log(m.data)
}
ws.onclose = function() {
console.log('Connection Closed')
}
</script>
var ws=new-WebSocket('ws://localhost:8080/','a')
ws.onopen=函数(){
console.log('WebSocket客户端已连接')
ws.send('测试')
}
ws.onerror=函数(e){
控制台日志(e)
}
ws.onmessage=函数(m){
console.log(m.data)
}
ws.onclose=function(){
console.log('连接已关闭')
}
客户端和服务器的输出完全相同
浏览器会话的Rawcap输出:
¡²ÃÔ ÿÿ eS:Üô
¡b 4 4E 46@ € ÁÇ€`gæ € K ÿ×S:Üô
©2 4 4E 47@ € ÁÇÁK:˜€`gç€ ‘V ÿ×S:Üô
( (E (8@ € ÁÇ€`gçÁK:™P ì- S:Üô
´ê î îE î9@ € ÁÇ€`gçÁK:™P v» GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:8080
Origin: null
Sec-WebSocket-Protocol: a
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: BkPvYoibS9i+g79JBOnVFQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36
S:Üô
´ê ( (E (:@ € ÁÇÁK:™€`iP êi S:Üô c Ò ÒE Ò;@ € ÁÇÁK:™€`iP [ HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: hXGSMoUCji4jazy7i4z/FlQ+utk=
Sec-WebSocket-Protocol: a
Origin: null
S:Üô c ( (E (<@ € ÁÇ€`iÁK;CP é¾ S:Üô * ( (E (=@ € ÁÇ€`iÁK;DP é½ S:Üô * ( (E (>@ € ÁÇ€`iÁK;DP é¼ S:Üô * ( (E (?@ € ÁÇ€`i®ÁK;DP é× S:Üô * ( (E (@@ € ÁÇÁK;C€`iP é¿ S:Üô * ( (E (A@ € ÁÇ€`i€`iP üj
(代码):
b 4 4 E 46欧元Áææ欧元Kÿx S:
©2 4 4 E 47欧元:gç€Vÿx S:
…((E)8欧元Á!'gÁK:™Pì-S:
"EîEî9"gçK:™P v»GET/HTTP/1.1
升级:websocket
连接:升级
主机:本地主机:8080
来源:空
Sec WebSocket协议:a
Pragma:没有缓存
缓存控制:没有缓存
Sec WebSocket键:BkPvYoibS9i+g79JBOnVFQ==
Sec WebSocket版本:13
Sec WebSocket扩展:permessage deflate;客户端最大窗口位,x-webkit-deflate-frame
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/33.0.1750.149 Safari/537.36
S:ÜÜÜ
"(E:"K):™欧元'i-Pêi S:iÜÒcÒEÒ;@ÁK:™Eur` i-P[HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec网箱验收:HXGSMOUCHI4JAZY7I4Z/FlQ+utk=
Sec WebSocket协议:a
来源:空
S:iÁK;DPêS:iê*((EÁKêiêK;DPéx S:iê*)
有人知道rawcap输出是否表明我的机器或安装的东西有问题吗?rawcap输出看起来正确吗?有人见过类似的情况吗?请注意,node.js客户端到node.js服务器在同一台机器上的我的centos vagrant实例中工作正常