сокет.сбой ввода-вывода на node.js сервер

#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 здесь, который вы можете использовать для периодического запуска кода.