我正在尝试使用react和express和socket.io建立一个聊天应用程序,但在尝试使用socket.io连接客户端和服务器时,我遇到了这个错误(我使用的是Firefox,我在所有其他浏览器上遇到了同样的错误)
Firefox无法连接到ws:/localhost:5000/socket.io/?eio=4&transport=websocket处的服务器。
加载页面时,与ws://localhost:5000/socket.io/?eio=4&transport=websocket的连接中断。
下面是我的代码:
客户端:
import React, {useState, useEffect} from 'react';
import queryString from 'query-string';
import io from "socket.io-client";
var connectionOptions = {
"force new connection" : true,
"reconnectionAttempts": "Infinity",
"timeout" : 10000,
"transports" : ["websocket"]
};
let socket;
const Chat = ({ location }) => {
const [name, setName] = useState('');
const [room, setRoom] = useState('');
const [message, setMessage] = useState('');
const [messages, setMessages] = useState([]);
const ENDPOINT = 'http://localhost:5000/';
useEffect(() => {
const{name , room} = queryString.parse(location.search);
socket = io.connect(ENDPOINT, connectionOptions);
setName(name);
setRoom(room);
socket.emit('receve', {name, room}, (error) => {
if(error) alert(error);
});
return () => {
socket.emit('disconnect');
socket.off();
}
}, [ENDPOINT, location.search]);
useEffect(() => {
socket.on('message', (message) => {
setMessage([...messages, message]);
})
}, [messages]);
const sendMessage = (e) => {
e.preventDefault();
if(message) {
socket.emit('sendMessage', message, () => setMessage(''));
}
}
console.log(message, messages);
return (
<div className="outerContaienr">
<div className="container">
<input
value={message}
onChange={(e) => setMessage(e.target.value)}
onKeyPress={(e) => e.key === 'Enter' ? sendMessage(e) 'enter code here': null}
/>
</div>
</div>
)
}
export default Chat;
服务器端:
const express = require('express');
const http = require('http');
const socketio = require('socket.io');
const cors = require('cors');
const {addUsers, RemoveUser, getUser, getUsersInRoom} = require('./users.js')
const PORT = process.env.PORT || 5000;
const router = require('./router');
const app = express();
const server = http.createServer(app);
const io = socketio(server);
app.use(cors());
app.use(router);
io.on("connect_error", (err) => {
console.log(`connect_error due to ${err.message}`);
});
io.on('connect', socket => {
socket.on('receve', ({ name, room }, callback) => {
const { error, user } = addUsers({ id: socket.id, name, room });
//console.log(user);
if (error)
return callback(error);
socket.emit('message', { user: 'admin', text: `${user.name}, welcome to the room ${user.room}` });
socket.broadcast.to(user.room).emit('message', { user: 'admin', text: `${user.name}, has joined!` });
socket.join(user.room);
callback();
});
socket.on('sendMessage', (message, callback) => {
const user = getUser(socket.id);
io.to(user.room).emit('message', { user: user.name, text: message});
callback();
});
socket.on('disconnect', () => {
console.log('User had left');
})
});
server.listen(PORT);
提前致谢
我认为您需要以以下格式添加COR。请尝试此代码段:
const io = socketio(server,{
cors: {
origin: "*",
},
});
希望修复这种情况,在矿机(Chrome)上,解决了令人讨厌的错误。
我有一个示例Spring启动应用程序来运行图形QL服务器,具有作为客户端,我的pom有以下依赖项: 当我尝试从客户端连接时,出现以下错误: 狩猎决议好心建议。 我还有几个问题: 我应该使用SimpleGraphQLHttpServlet将请求路由到endpoint吗 我正在React UI上使用apollo client,那么它是强制使用apollo server还是spring boot可以工作
在大学的一个实践课程,我必须在Java写一个小游戏,使用客户机/服务器基础设施。我需要使用Websockets进行通信,而其他学生(他们的解决方案必须与我的兼容)选择了Netty SocketIO服务器作为服务器端(https://github.com/mrniko/netty-socketio/tree/master/src)。我已经知道如何设置服务器: 现在你能给我解释一下,客户机代码应该是什
问题内容: 我正在尝试在Java主机和android客户端之间设置双向身份验证SSL连接。不知道为什么它没有连接。以下是Android客户端应用和Java服务器的代码。 客户代码: 服务器代码: 我在服务器上遇到“没有共同的密码套件”错误。由于我不在SSL连接设置中。如果您发现错误或主要问题,请允许我提供帮助。 这是我用来创建证书和信任库的链接。我创建的Truststore和kestore在这里
我正在尝试使用milo(0.4.2)连接到Prosys opcua仿真服务器 我使用openssl为用户生成了证书/密钥 /home/user/。prosysopc/prosys opc ua仿真服务器/用户_PKI/CA/certs /home/user/。prosysopc/prosys opc ua仿真服务器/PKI/CA/certs 我检查了prosys用户界面两个证书都出现了 最后,当我
客户端应用程序在以下代码处挂起:
前面的章节介绍了所有 Redis 的重要功能组件: 数据结构、数据类型、事务、Lua 环境、事件处理、数据库、持久化, 等等, 但是我们还没有对 Redis 服务器本身做任何介绍。 不过, 服务器本身并没有多少需要介绍的新东西, 因为服务器除了维持服务器状态之外, 最重要的就是将前面介绍过的各个功能模块组合起来, 而这些功能模块在前面的章节里已经介绍过了, 所以本章将焦点放在服务器的初始化过程,