基本上我的socket.io服务器只能用于..我想只有一台计算机。如果我使用Chrome,Chrome隐身浏览器,Edge,则可以使用。我尝试在同一个Wifi上同时通过手机使用该应用程序,这就是我遇到的问题。看起来socket.io当时无法正常工作。我觉得它仅适用于一个客户端(也许是IP,端口问题?)
我将socket.io与React js结合使用,哦,天哪,要使它们在本地和Heroku上都能正常工作还是很麻烦的。
这是我的服务器文件/src/server/index.js
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const axios = require("axios");
const port = process.env.PORT || 4001; // Only this port works for some reason
const index = require("./routes/index");
const app = express();
const path = require('path');
const server = http.createServer(app);
const io = socketIo(server); // < Interesting!
io = socketIo.listen(app);
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10); // Recommended from online guys
});
app.use(express.static(path.join(__dirname, '../../index')));
app.get('/', (req, res, next) =>
res.sendFile(index))
io.on("connection", socket => {
console.log("New client connected");
})
server.listen(port, () => console.log(`Listening on port ${port}`));
我使用配置文件动态更改服务器,并且每次需要通过socket.io-client连接到套接字时都将其导入
let server = 'ws://XXXXXXXXXXXXX.herokuapp.com/socket.io/?EIO=4&transport=websocket';
const env = process.env.NODE_ENV;
if (env === 'development') {
server = 'http://127.0.0.1:4001';
}
module.exports = server;
可能是什么问题?为什么只在我的根计算机上工作?测功机问题或其他问题? 我是heroku和socket.io的完整入门者,所以任何信息都将对您有所帮助。
**编辑:
我不确定,但是我觉得VS Code中运行的服务器使其可以在我的heroku应用中正常工作。我已将其关闭,服务器仅继续发送net :: ERR_CONNECTION_REFUSED错误。
答案 0 :(得分:0)
解决方案:
必须使用mars/heroku-cra-node
buildpack。它将react-ui和服务器代码分开。端口配置:const port = process.env.PORT || 4001
,
客户监听:let server = window.location.hostname
为客户端提供一个单独的配置文件也很不错,该文件具有以下内容:
const env = process.env.NODE_ENV;
if (env === 'development') {
server = 'http://localhost:4001';
}
module.exports = server;
那么您就不必在开发(VSCode)或生产环境(Heroku)中更改端口和服务器。