在开发环境中,这按预期工作, 服务器代码...在开发中,我只将客户端中的url指定为 const socket = io("http://localhost:3001");以下是服务器代码。
const httpServer = createServer(app);
export const io = new Server(httpServer, {
cors: {
origin: "*",
},
path: "/socket.io/",
});
io.on("connection", (socket) => {
// make function calls
postOrderDeliveryStatus(socket);
// getOrders(socket);
// console.log("Socket Connected");
// close socket
socket.on("disconnect", () => {
socket.disconnect(true);
});
});
httpServer.listen(3001);
//mongoose
// console.log(process.env.CONNECTION_URL)
mongoose
.connect(process.env.CONNECTION_URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
})
.then(() =>
app.listen(PORT, () =>
winston.info(
`Server Running in ${process.env.NODE_ENV} mode on Port: ${PORT}`
)
)
)
.catch((error) => console.log(`${error} did not connect`));
mongoose.set("useFindAndModify", false);
客户...
const socket = io("http://localhost:3001");
const dispatchOrderHandler = () => {
const delivery_status = "DISPATCHED";
socket.emit("update-order", order._id, delivery_status);
// dispatch(getOrderDetailsToProcess(paramsOrderId)); //This dispatch alone can suffice
socket.on("updated-order", (updated_order) => {
dispatch(
getOrderDetailsToProcess(paramsOrderId, (order) => [
...order,
updated_order,
])
);
});
};
套接字运行时出现的错误是 net::ERR_CONNECTION_REFUSED。我也尝试过 const 套接字 = io();没有指定 url,因为客户端和服务器都在同一个域上运行,但两者都没有?由于指定域名不起作用,生产中的连接 URL 应该是什么?我正在使用heroku!
使用托管服务时,该服务会将端口提供给客户端。您可以通过
process.env.PORT
访问该端口。为了让开发者的体验对自己更加友好,您可以使用 httpServer.listen(process.env.PORT || 3001);
来监听端口
至于客户端,我相信你使用
const socket = io();
是对的,尽管我已经有一段时间没有使用socket.io了。
使用
const socket = io("serverurl")
连接到特定服务器。
我相信你也可以在那里指定一个端口。
就像我的网站一样,我会这样做:
const socket = io("us2.swordbattle.io:3000")
const 套接字 = io();如果您的前端与服务器位于同一域中,则此方法有效