Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 除非在本地运行,否则Socket.io将无法工作_Node.js_Reactjs_Sockets_Socket.io - Fatal编程技术网

Node.js 除非在本地运行,否则Socket.io将无法工作

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

我有一个用React&Node制作的游戏,它几乎完全使用套接字来处理事件。现在,当我在本地运行它时,一切都完全按照我所需要的方式工作,但一旦我托管它,我就什么也没发生,我真的需要一只手。我到处寻找答案,但运气不好。我想我可能知道问题在哪里,只是不知道如何解决

服务器

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)来让它工作,现在工作起来就像一个符咒