#node.js #sockets #socket.io
#node.js #сокеты #socket.io
Вопрос:
Я пытаюсь настроить канал связи между двумя узловыми серверами.
.----------. .----------.
| SERVER A | <--> | SERVER B |
'----------' '----------'
По какой-то причине сервер B подтверждает, что сокет подключен, но не отвечает ни на какие события, которые я пытаюсь передать с сервера A
Сервер A:
var iocli = require('socket.io-client');
var socket = iocli.connect('http://localhost:9000');
// there is some code before here that declares the usertask array and //connects to a database but none of it is io related
do {
var d = new Date().toString();
if(JSON.stringify(userTasks) != '[]'){
if(userTasks[0].date.toString() == d){
if (state == true){
socket.emit('task-due', userTasks[0] )
socket.emit('test-task', userTasks[0] )
//the message from the line below logs correctly so the lines above must execute too
console.log('event is due');
state = false
}
}
}
} while(true);
Сервер B:
var io = require('socket.io')(9000);
io.on('connection', function (socket) {
sendTextMessage(admin.fbID, "Got a client connected ")
socket.on("test-task",function(data){
sendTextMessage(admin.dbID, "got data " JSON.stringify(data))
})
socket.on('task-due', function(task){
if(typeof task.user_id == "string" ){
task.user_id = new mongoose.Types.ObjectId(data._id);
}
User.findOne({
"_id": task.user_id
},"fbID",function(err, user){
if (err) errorHandler(err);
if (task.mark){
sendTextMessage(user.fbID, "One of your tasks is due in !! : " task.body " with a " task.mark "marker.")
}else{
sendTextMessage(user.fbID, "One of your tasks is due in !! : " task.body)
}
})
})
});
Любая полезная информация будет высоко оценена
Комментарии:
1. Вы
do { ... } while (true)
блокируете цикл событий. Я также не вижу, где на сервере A вы прослушиваете сообщения, отправленные с сервера B.2. @MichalHainc но сервер A не прослушивает сообщения, отправленные с сервера B, и часть вопроса заключается в том, что сервер A «не отвечает ни на какие события, которые я пытаюсь передать с сервера B» .
3. @robertklep извините, я имею в виду, что сервер B не отвечает ни на какие события, отправленные с сервера A. Вы хотите сказать, что эти скрипты не работают из-за цикла while?
4.@SultanKenjeyev скорее всего, да. Сначала попробуйте заставить его работать без цикла while (всего одна итерация), чтобы посмотреть, работает ли это. Если это так, прочитайте
setTimeout/setInterval
здесь, который вы можете использовать для периодического запуска кода.