我试图了解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。
谢谢。
2条答案
按热度按时间4uqofj5v1#
你创建了两个http服务器,其中一个给了socket.io,但是从来没有启动过那个服务器。所以socket.io永远不会工作,因为它连接到一个没有运行的服务器示例。
这些是相互矛盾的:
以及:
因为每一个都创建了一个新的服务器。在
app.listen()
中,它做到了:所以,去掉这个:
然后,从这个改变:
对此:
然后,对socket.io使用ONE
server
变量。你也可以用另一种方法,删除
app.listen()
,使用你已经创建的server
,然后只执行server.listen(...)
。关键是你只需要创建一个服务器示例,而不是两个,并将一个实际运行的服务器示例提供给socket.io和express。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