Я использую 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