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

时间:2019-06-28 01:04:22

标签: node.js reactjs sockets socket.io

我有一个用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(),它在SORTA上可以工作,但是我丢失了名称空间,并且监听服务器上的套接字都听不到我发出的任何内容。

加载托管版本时出现以下错误

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(“ http://IP:4001/NAMEPSACE”)和socketIOClient(“ http://IP/NAMEPSACE”),仍然没有任何作用

1 个答案:

答案 0 :(得分:1)

好的,所以我通过更改来使它起作用 const socket = socketIOClient("http://localhost:4001/NAMEPSACE")

const socket = socketIOClient('/NAMESPACE)