【发布时间】:2020-07-24 19:15:57
【问题描述】:
你好。我花了一些时间试图理解这里的问题。
我查看了 StackOverflow 上似乎处理相同问题的每个问题,但到目前为止没有任何效果。
我有一个使用 Create React App 和 Socket.io 构建的简单聊天应用程序(在 localhost 上运行良好),但是当部署到我的节点服务器时,我收到 ERR_CONNECTION_TIMED_OUT 错误并且没有响应。网站本身运行良好,但是当我调用我的 Socket.io 服务器时,却出错了。
我猜这是因为我对 Node 和 Socket.io 的工作方式缺乏了解。
一些信息:
server.js
const path = require("path");
const express = require("express");
const app = express();
const http = require("http").createServer(app);
const port = 8080;
http.listen(port, () => console.log(`http: Listening on port ${port}`));
const io = require("socket.io")(http, { cookie: false });
app.use(express.static(path.join(__dirname, "build")));
app.get("/*", function (req, res) {
res.sendFile(path.join(__dirname, "build", "index.html"));
});
io.on("connection", (socket) => {
console.log("New client connected");
// Emitting a new message. Will be consumed by the client
socket.on("messages", (data) => {
socket.broadcast.emit("messages", data);
});
//A special namespace "disconnect" for when a client disconnects
socket.on("disconnect", () => console.log("Client disconnected"));
});
client.js
....
const socket =
process.env.NODE_ENV === "development"
? io("http://localhost:4001")
: io("https://my-test-site:8080");
socket.on("messages", (msgs: string[]) => {
setMessages(msgs);
});
....
docker-compose.yml
version: "X.X"
services:
app:
image: "my-docker-image"
build:
context: .
dockerfile: Dockerfile
args:
DEPENDENCY: "my-deps"
ports:
- 8080:8080
Dockerfile
...
RUN yarn build
CMD node server.js // run my server.js
...
更新:我通过确保我的主端口仅用于运行 Express(使用 socket.io)解决了这个问题 - 在我的设置中是端口:8080。当在同一个 Docker 容器,我认为我不需要创建和使用 express 'createServer' 的 https 版本。
【问题讨论】: