用于生产的Socket.io连接URL

问题描述 投票:0回答:3

在开发环境中,这按预期工作, 服务器代码...在开发中,我只将客户端中的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!

node.js reactjs sockets heroku socket.io-1.0
3个回答
1
投票

使用托管服务时,该服务会将端口提供给客户端。您可以通过

process.env.PORT
访问该端口。为了让开发者的体验对自己更加友好,您可以使用
httpServer.listen(process.env.PORT || 3001);

来监听端口

至于客户端,我相信你使用

const socket = io();
是对的,尽管我已经有一段时间没有使用socket.io了。


0
投票

使用

const socket = io("serverurl")
连接到特定服务器。

我相信你也可以在那里指定一个端口。

就像我的网站一样,我会这样做:

const socket = io("us2.swordbattle.io:3000")


0
投票

const 套接字 = io();如果您的前端与服务器位于同一域中,则此方法有效

© www.soinside.com 2019 - 2024. All rights reserved.