typescript Socket.IO超时connect_error

x6492ojm  于 2023-04-13  发布在  TypeScript
关注(0)|答案(2)|浏览(316)

我试图了解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。
谢谢。

4uqofj5v

4uqofj5v1#

你创建了两个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"));

然后,对socket.io使用ONE server变量。
你也可以用另一种方法,删除app.listen(),使用你已经创建的server,然后只执行server.listen(...)。关键是你只需要创建一个服务器示例,而不是两个,并将一个实际运行的服务器示例提供给socket.io和express。

ebdffaop

ebdffaop2#

问题一定出在您的URL中。const socket = io('http://192.168.0.191:3000',{ autoConnect:return();
在react-native的情况下,URL将是您的系统IP地址,您将通过运行ip addr命令获得。
inet192.168.0.191/24 brd192.168.0.255scope global dynamic noprefixroute wlp0s20f3

相关问题