首页 > 解决方案 > Socket.on 没有触发

问题描述

我正在构建一个留言板作为学习练习,并有工作通知和一个使用 socket.io 的聊天应用程序。

我正在尝试集成一个基本的视频通话功能,但我很难为该功能做一些基本的准备工作。当服务器发出相关功能时,我的 socket.on 代码没有触发,我不知道为什么。发射周围的控制台日志都在执行,所以我知道正在访问代码。

在客户端上,我的 socket.on 代码与我的通知在同一个组件中,并且它们正在工作并且它肯定已安装。

未执行的是 userOff 和 receiveCall 函数(无论出于何种原因)......

任何帮助将不胜感激。

服务器:

io.on('connection', (socket) => {
  socket.emit('messageFromServer');
  socket.on('messageToServer', (dataFromClient) => {
    connectedUsers[dataFromClient.username] = socket;
  });
  socket.on('join', ({ username, room }) => {
    socket.join(room);
    socket.emit('message', 'Welcome!');
    socket.broadcast
      .to(room)
      .emit('message', `${username} has joined the room!`);
  });
  socket.on('messageRoom', ({ username, room, message }) => {
    socket.broadcast.to(room).emit('message', `${username}: ${message}`);
  });
  socket.on('call', ({ username, id }) => {
    if (connectedUsers[username]) {
      connectedUsers[username].emit('recieveCall', id);
      console.log('online emitted');
    } else {
      socket.emit('userOff');
      console.log('offline emitted');
    }
  });
  socket.on('disconnect', () => {
    socket.disconnect(true);
  });
});

客户:

import React, { useContext, useEffect } from 'react';
import socketIOClient from 'socket.io-client';
import StateContext from '../StateContext';
import DispatchContext from '../DispatchContext';
const endpoint = 'http://localhost:5000';

const Socket = () => {
  const appState = useContext(StateContext);
  const appDispatch = useContext(DispatchContext);
  const socket = socketIOClient(endpoint);

  useEffect(() => {
    socket.on('messageFromServer', () => {
      socket.emit('messageToServer', { username: appState.username });
    });
    socket.on('userOff', () => {
      console.log('user offline');
    });
    socket.on('recieveCall', (id) => {
      console.log('recieve call');
    });
    socket.on('mailNotification', () => {
      document.getElementById('notifyMail').classList.add('notify');
    });
    socket.on('boardsNotification', () => {
      document.getElementById('notifyBoards').classList.add('notify');
    });
  }, []);

  return null;
};

export default Socket;

标签: javascriptnode.jsreactjssocket.iomern

解决方案



推荐阅读