У меня есть приложение Node.js с внешним интерфейсом и бэкэнд-приложением, бэкэнд будет управлять списком и «нажимать» обновление для внешнего приложения, вызов приложение frontend запускает обновление списка, чтобы все клиенты получали правильные данные списка.Соединение на стороне сервера Node.js с Socket.io
Проблема на стороне серверной, когда я нажимаю кнопку, я выполнить вызов AJAX, и что AJAX вызов будет выполнить следующий код (обрезается некоторые операции из него):
Lists.findOne({_id: active_settings.active_id}, function(error, lists_result) {
var song_list = new Array();
for (i=0; i < lists_result.songs.length; i++) {
song_list.push(lists_result.songs[i].ref);
}
Song.find({
'_id': {$in: song_list}
}, function(error, songs){
// DO STUFF WITH THE SONGS
// UPDATE SETTINGS (code trimmed)
active_settings.save(function(error, updated_settings) {
list = {
settings: updated_settings,
};
var io = require('socket.io-client');
var socket = io.connect(config.app_url);
socket.on('connect', function() {
socket.emit('update_list', {key: config.socket_key});
});
response.json({
status: true,
list: list
});
response.end();
}
});
});
Однако response.end никогда не работает, вызов продолжает висит, и еще больше, список не всегда обновляется, поэтому возникает проблема с кодом socket.emit. И соединение сокета остается открытым Я предполагаю, потому что ответ не закончился?
Я никогда не делал эту серверную сторону, поэтому любая помощь была бы высоко оценена. (Active_settings и т.д. существует)
Как закрыть это соединение? Вызов будет происходить только один раз каждые 4-5 минут и выполняется только одним человеком, так что новое соединение в порядке. Думаю – romenov
@romenov try 'socket.disconnect()' после того, как вы вышли из сообщения (в обработчике 'connect') – robertklep
Я изменил его теперь на это: socket.on ('connect', function() { console.log ('connected'); socket.emit ('update_list', {key: config.socket_key}); socket .disconnect(); }); socket.on ('disconnect', function() { console.log ('disconnecting'); response.end(); }); response.end(); Когда я выполняю первые выходные выходы консоли: подключен, отключается, но response.end() все еще не работает (область видимости в списке также исправлена) Когда я снова нажимаю (даже после обновления и т. Д.), Это не дает связанное/отсоединяющее сообщение. И мой вызов продолжает выполняться, и через 2 минуты он получает 200 OK – romenov