javascript - 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;
解决方案
你试过先打电话给socket.open吗
https://socket.io/docs/client-api/#socketopen
并监听连接事件
https://socket.io/docs/client-api/#Event-%E2%80%98connect%E2%80%99
推荐阅读
- linux - 无法从 Docker 容器访问网络
- arrays - 如何以选定的维度对数组进行切片?
- excel - 用于查看绘图上不同数据的 MS Excel 下拉菜单
- python-sphinx - 可以将 Sphinx 的 extlinks 扩展配置为显示 url 吗?
- azure - 当容器之一终止时停止容器实例组
- node.js - 何时将用户输入写入数据库?
- c++ - STM32 引脚 B0 用作输入,但 B1 不用作
- javascript - 在 React 中克隆整个状态对象会导致副作用吗?
- inheritance - Rust 中的方法覆盖替代方案
- python - 检索每个一行中的 html 文件