#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"});
});
Чего я ожидал бы от кода, так это следующей последовательности событий:
- сокет подключается, сервер выдает сообщение «sup».
- клиент получает сообщение «sup» и регистрирует «whoo»
- клиент отправляет сообщение «привет»
- сервер получает сообщение «привет» и регистрирует «ПРИВЕТ!»
Шаг 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 да, я не понимал, что версия на стороне клиента — это просто ссылка на самую последнюю версию этого сокета. узлы ввода-вывода. Я подумал: «Ну, я использую устаревшую версию, но устаревшая версия раньше работала …»