我有一个用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”),仍然没有任何作用
答案 0 :(得分:1)
好的,所以我通过更改来使它起作用
const socket = socketIOClient("http://localhost:4001/NAMEPSACE")
到
const socket = socketIOClient('/NAMESPACE)