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。
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。