У меня были некоторые проблемы с приведенным ниже кодом, который я собрал вместе. Все события работают, как рекламируется, однако, когда клиент отключается в автономном режиме, без первого отключения события закрытия не сразу получает звонок. Если вы дадите ему минуту или около того, он в конечном итоге будет вызван. Кроме того, я нахожу, что если я продолжаю отправлять данные клиенту, он быстрее и быстрее запускает событие закрытия. Наконец, если клиент изящно отключается, конечное событие называется просто отлично.Nodejs Websocket Закрыть Событие, вызванное ... В конечном счете
Я понимаю, что это связано с другими событиями прослушивания, такими как upgrade и ondata.
Следует также указать, что клиент является встроенным устройством.
client http request:
GET /demo HTTP/1.1\r\n
Host: example.com\r\n
Upgrade: Websocket\r\n
Connection: Upgrade\r\n\r\n
//nodejs server (I'm using version 6.6)
var http = require('http');
var net = require('net');
var sys = require("util");
var srv = http.createServer(function (req, res){
});
srv.on('upgrade', function(req, socket, upgradeHead) {
socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
'\r\n\r\n');
sys.puts('upgraded');
socket.ondata = function(data, start, end) {
socket.write(data.toString('utf8', start, end), 'utf8'); // echo back
};
socket.addListener('end', function() {
sys.puts('end'); //works fine
});
socket.addListener('close', function() {
sys.puts('close'); //eventually gets here
});
});
srv.listen(3400);
Может кто-нибудь предложить решение для немедленного закрытия мероприятия? Я пытаюсь сохранить это просто без использования модулей. Заранее спасибо.
Существует причина, по которой люди пишут модуль для этих вещей. У вас будет довольно много работы, если вы хотите сделать перекрестный проект, соответствующий внедрению websocket, без использования какого-либо ранее написанного кода. – einaros
@einaros +1. http://socket.io/ уже занимается этими вопросами и многими другими: http://stackoverflow.com/questions/7192747/socket-io-delay-in-firing-the-disconnect-event –
@RohanSingh, I должен знать - я написал код websocket для socket.io. – einaros