Сокет не отправляет отправку от клиента (отправка штрафа с сервера)

#node.js #socket.io

#node.js #socket.io

Вопрос:

Ниже приведен модульный тест, показывающий поведение, с которым я сталкиваюсь, которое я распознаю как отличное от того, что я испытывал раньше. По сути, способ, которым я использовал сокеты раньше (возможно, два месяца назад), перестал работать где-то между тем и сейчас. Я не уверен, что произошло. Мой ранее работающий код сломался.

 var socketio = require('socket.io');
var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type' : 'text/html' });
    var html = "<html><head><script src="/socket.io/socket.io.js"></script>
                        <script>var sock = io.connect();
                        sock.on('sup', function(data) {
                            console.log("whoo");
                            sock.emit('howdy', {'hi' : 'ho'});
                        });</script></head></html>";
    res.end(html);
}).listen(8080);

socketio.listen(server, {log:false}).on('connection', function(socket) {
    socket.on('howdy', function(data){console.log("HI!");});
    socket.emit("sup", {"hey" :"yo"});
});
  

Чего я ожидал бы от кода, так это следующей последовательности событий:

  1. сокет подключается, сервер выдает сообщение «sup».
  2. клиент получает сообщение «sup» и регистрирует «whoo»
  3. клиент отправляет сообщение «привет»
  4. сервер получает сообщение «привет» и регистрирует «ПРИВЕТ!»

Шаг 4 вообще не выполняется. (и поэтому я предполагаю, что шаг 3 также может не выполняться)

Что происходит?

Ответ №1:

Ваш код на стороне клиента по сути таков

 var sock = io.connect(); 
console.log("Gets here");
sock.on('sup', function(data) { 
     console.log("whoo"); 
});
sock.emit('howdy', {'hi' : 'ho'});
  

Я предполагаю, что это сработает, если вы просто переместите излучение в обработчик.

 var sock = io.connect(); 
console.log("Gets here");
sock.on('sup', function(data) { 
     console.log("whoo"); 
     sock.emit('howdy', {'hi' : 'ho'});
});
  

Или вы можете попробовать прослушать событие подключения

 var sock = io.connect(); 
console.log("Gets here");
sock.on('sup', function(data) { 
     console.log("whoo"); 
});
sock.on('connect', function() {
     sock.emit('howdy', {'hi' : 'ho'});
});
  

Комментарии:

1. Спасибо за предложение, но это не решило мою проблему. Ознакомьтесь с моим исправленным кодом (я сократил его еще больше)

Ответ №2:

Я только что обновил socket.io , и сейчас это работает.

Комментарии:

1. facepalm, отличная работа, в любом случае, это случилось со всеми нами: p

2. @Jujuleder да, я не понимал, что версия на стороне клиента — это просто ссылка на самую последнюю версию этого сокета. узлы ввода-вывода. Я подумал: «Ну, я использую устаревшую версию, но устаревшая версия раньше работала …»