Node.js 除非在本地运行,否则Socket.io将无法工作
我有一个用React&Node制作的游戏,它几乎完全使用套接字来处理事件。现在,当我在本地运行它时,一切都完全按照我所需要的方式工作,但一旦我托管它,我就什么也没发生,我真的需要一只手。我到处寻找答案,但运气不好。我想我可能知道问题在哪里,只是不知道如何解决 服务器Node.js 除非在本地运行,否则Socket.io将无法工作,node.js,reactjs,sockets,socket.io,Node.js,Reactjs,Sockets,Socket.io,我有一个用React&Node制作的游戏,它几乎完全使用套接字来处理事件。现在,当我在本地运行它时,一切都完全按照我所需要的方式工作,但一旦我托管它,我就什么也没发生,我真的需要一只手。我到处寻找答案,但运气不好。我想我可能知道问题在哪里,只是不知道如何解决 服务器 const express = require("express"); const app = express(); const server = require("http").Server(app); var io = requ
const express = require("express");
const app = express();
const server = require("http").Server(app);
var io = require("socket.io")(server);
const path = require("path");
const sockets = require("./sockets_controller");
app.use(express.static(`${__dirname}/../build`));
io.of("/create").on("connection", socket => {
socket.on("create game", user => sockets.createGame(user, socket));
});
...More namepaces and event listeners...
server.listen(4001, () => console.log(`server running on port 4001`));
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "../build/index.html"));
});
同样,它在localhost上工作得非常完美:但我是这样连接前端的
我的每个组件都有一个与之关联的名称空间,因此在使用套接字的每个组件中,我都有一个名称空间
import socketIOClient from "socket.io-client";
const socket = socketIOClient("http://localhost:4001/NAMEPSACE");
我在这里看到,我应该试着只使用socketIOClient(),这很管用,但是我失去了我的名称空间,我发出的任何消息都不会被服务器上侦听的套接字听到
当我加载托管版本时,出现以下错误
The origin 'http://www.mywebsite.com' did not find 'http://www.mywebsite.com' in the Access-Control-Allow-Origin response header for cross-origin resource at MY_IP
我不得不想象我必须把localhost改成什么,但我不能确定
编辑:我也尝试过socketIOClient(“”)和socketIOClient(“”),但仍然没有任何效果好的,所以我通过更改
const socket=socketIOClient(“http://localhost:4001/NAMEPSACE“”
到
const socket=socketIOClient('/NAMESPACE)
客户端代码不能引用http://localhost:4001/NAMESPACE
,因为这会告诉浏览器查看您自己的计算机,而不是后端代码所在的服务器。您需要找出远程主机的IP地址,然后确保您的前端组件在尝试连接时正在使用该IP地址。我已经这样做了,同样的错误编辑:当我将其更改为IP时,我没有指定端口。我想我会试试“好的,我知道了。我可以通过执行socketIOClient=('/namepace)来让它工作,现在工作起来就像一个符咒