Socket.IO超时connect_error
Socket.IO Timeout connect_error
我正在尝试了解 socket.io,我按照许多教程进行操作,但无法正确连接。
服务器端:index.ts
import express from "express";
import { Server } from "socket.io";
import http from "http";
import cors from "cors";
//connections
const app = express();
const server = http.createServer(app);
const io = new Server(server);
app.use(cors);
app.listen(4000, () => console.log("Server is running on port 4000"));
io.on("connection", (socket) => {
console.log("socket connected");
});
客户:index.js
const io = require("socket.io-client")
var socket = io.connect("http://localhost:4000");
socket.on("connect", () => {
console.log(socket.id); //Doesn't enter here
});
socket.on("connect_error", (err) => {
console.log(`connect_error due to ${err.message}`); //Outputs connect_error due to timeout
});
客户端不断打印
connect_error due to timeout
考虑到这是我第一次使用 socket.io。
谢谢。
您正在创建两个 http 服务器,将一个提供给 socket.io,但从未启动该服务器。因此,socket.io 永远不会工作,因为它附加到不是 运行.
的服务器实例
这些是相互矛盾的:
const server = http.createServer(app);
和:
app.listen(4000, () => console.log("Server is running on port 4000"));
因为每一个都会创建一个新的服务器。在 app.listen()
内部,它确实:
const server = http.createServer(app);
server.listen();
return server;
所以,删除这个:
const server = http.createServer(app);
并且,从这个改变:
app.listen(4000, () => console.log("Server is running on port 4000"));
对此:
const server = app.listen(4000, () => console.log("Server is running on port 4000"));
然后,将那个 server
变量用于 socket.io。
你也可以用另一种方式来做,你删除 app.listen()
并使用你已经创建的 server
然后只做 server.listen(...)
。关键是您只需要创建一个服务器实例而不是两个,并将那个 运行 服务器实例实际提供给 socket.io 并表达。
我正在尝试了解 socket.io,我按照许多教程进行操作,但无法正确连接。
服务器端:index.ts
import express from "express";
import { Server } from "socket.io";
import http from "http";
import cors from "cors";
//connections
const app = express();
const server = http.createServer(app);
const io = new Server(server);
app.use(cors);
app.listen(4000, () => console.log("Server is running on port 4000"));
io.on("connection", (socket) => {
console.log("socket connected");
});
客户:index.js
const io = require("socket.io-client")
var socket = io.connect("http://localhost:4000");
socket.on("connect", () => {
console.log(socket.id); //Doesn't enter here
});
socket.on("connect_error", (err) => {
console.log(`connect_error due to ${err.message}`); //Outputs connect_error due to timeout
});
客户端不断打印
connect_error due to timeout
考虑到这是我第一次使用 socket.io。
谢谢。
您正在创建两个 http 服务器,将一个提供给 socket.io,但从未启动该服务器。因此,socket.io 永远不会工作,因为它附加到不是 运行.
的服务器实例这些是相互矛盾的:
const server = http.createServer(app);
和:
app.listen(4000, () => console.log("Server is running on port 4000"));
因为每一个都会创建一个新的服务器。在 app.listen()
内部,它确实:
const server = http.createServer(app);
server.listen();
return server;
所以,删除这个:
const server = http.createServer(app);
并且,从这个改变:
app.listen(4000, () => console.log("Server is running on port 4000"));
对此:
const server = app.listen(4000, () => console.log("Server is running on port 4000"));
然后,将那个 server
变量用于 socket.io。
你也可以用另一种方式来做,你删除 app.listen()
并使用你已经创建的 server
然后只做 server.listen(...)
。关键是您只需要创建一个服务器实例而不是两个,并将那个 运行 服务器实例实际提供给 socket.io 并表达。