socket.io 未连接

socket.io is not connecting

Socket.IO 版本 - 4.4.1

服务器

const express = require("express");
const app = express();
const http = require("http");
const server = http.createServer(app);
const { Server } = require("socket.io");
const cors = require("cors");

const io = new Server(server, {
  cors,
});

const PORT = 3000;

app.use(cors());

io.on("connection", (socket) => {
  console.log("A user connected :)");
  socket.on("msg", console.log);

  socket.on("connect_error", (err) => {
    console.log(`connect_error due to ${err.message}`);
  });
});

server.listen(PORT, () => {
  console.log("listening on *:" + PORT);
});

HTML

Inside body

 <script
      src="https://cdn.socket.io/4.4.1/socket.io.min.js"
    ></script>
    <script>
      // socket.io
      console.log("Connecting..")
      const socket = io("http://localhost:3000")
      socket.on("connect", () => {
        console.log(socket.connected); // true
      });
    </script>

客户端和服务器都没有错误,但我仍然无法连接到服务器。

如果你改变这个:

const io = new Server(server, {
   cors,
});

对此:

const io = new Server(server);

然后,您的代码开始为我工作。因此,您尝试将 cors 与 socket.io 一起使用的方式有问题。仅供参考,如果您将客户端更改为始终使用 webSocket 作为传输,那么您的 socket.io 连接不需要 CORS,因为 websocket 连接不受同源限制。

const socket = io("http://localhost:3000", {transports: ["websocket"]});

默认情况下,socket.io 连接以 http 轮询(受同源限制)开始,然后在几次 http 请求后切换到 websocket。