Клиент Socket IO задерживает событие подключения запуска при назначении переменной - PullRequest
1 голос
/ 17 мая 2019

Я использую React для внешнего интерфейса и Node.js для внутреннего интерфейса с Socket.io для веб-сокетов.

учтите это:

У меня есть этот модуль для настройки сокетов на стороне клиента.

socket.js

export default () => {

 const socket = io(`${config.origin}/chat`);
  const getAllChatMessages = messages => {
    socket.on('get-chat', messages);
  };

  const updateChatHistory = lastMessage => {
    socket.on('new-message', lastMessage);
  };

  const sendNewMessage = newMessage => {
    socket.emit('new-message', newMessage);
  };

  const unregisterHandlers = () => {
    socket.off('get-chat');
    socket.off('new-messge');
  };

  return {
    getAllChatMessages,
    updateChatHistory,
    unregisterHandlers,
    sendNewMessage
  };
};

И я использую это так в моем React Component

Chat.js

class Chat extends Component {
  constructor() {
    super();
    this.client = socket();
    this.state = { chatMessage: '', chatHistory: [], today: new Date() };
  }

Обратите внимание, что все работает .Однако, есть очень странное поведение, и когда я присваиваю значение socket() для this.client внутри конструктора, я получаю 7-секундную задержку до того, как на сервере сработает событие «при соединении».Но если я переписываю свой конструктор следующим образом:

 class Chat extends Component {
    constructor() {
    super();
    socket();
    this.state = { chatMessage: '', chatHistory: [], today: new Date() };
  }

, то есть если я просто выполняю функцию socket() и не назначаю ее свойству this.client, тогда все происходит мгновенно.

Почему это ??В обоих случаях

io(<code>${config.origin}/chat</code>);
запускается внутри socket.js
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...