首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当服务器刷新/关闭时,Socket.io保持连接

当服务器刷新/关闭时,Socket.io保持连接
EN

Stack Overflow用户
提问于 2021-04-11 08:34:59
回答 1查看 377关注 0票数 0

以我对套接字还不熟悉为前提,我试图在服务器上设置第一个配置(Node /Express)。

在这样做的时候,我遇到了一个问题,每次我保存时,都会遇到无恶魔崩溃的问题,方法是返回Error: listen EADDRINUSE: address already in use :::8080

在这里,服务器实现:

代码语言:javascript
运行
复制
import express from "express";
import cors from "cors";
import { Server, Socket } from "socket.io";
import { createServer } from "http";
import morgan from "morgan";

// App configuration
const app = express();
const server = createServer(app);
const io = new Server(server);
const port = process.env.PORT || 8080;

// Middlewares
app.use(cors());
app.use(express.json());
app.use(morgan("combined"));

// Socket connection
io.on("connect", (socket: Socket) => {
  socket.send("test");
});

server.listen(port, () => {
  console.log(`Server is up and running on ${process.env.NODE_ENV} - port ${port}`);
});

我认为这是因为socket.io连接从未被关闭/断开,服务器实例处于监听状态。

我环顾四周,发现许多q/a都在建议命令来查找和终止进程,但我需要一个解决方案,以便在每次快速服务器被拒绝时自动断开套接字。

我尝试了以下几点:

代码语言:javascript
运行
复制
io.on("disconnect", () => {
  io.sockets.disconnect();
}

正如建议的那样,here,但是TS抱怨使用Property 'disconnect' does not exist on type 'Namespace<DefaultEventsMap, DefaultEventsMap>'.ts(2339)io.sockets.disconnect()

你知道该如何处理这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-11 08:44:32

我认为在socket初始化中可能存在问题。您能尝试一下这种在https://socket.io/get-started/chat#Integrating-Socket-IO中显示的初始化吗?

代码语言:javascript
运行
复制
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const io = require('socket.io')(server);

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
  console.log('a user connected');
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

因此,基本上将服务器对象从socket.io中传递给默认导入,就像这样(现在,您正在socket.io中使用" server“):

代码语言:javascript
运行
复制
import express from "express";
import cors from "cors";
import ioDefault, { Server, Socket } from "socket.io";
import { createServer } from "http";
import morgan from "morgan";

// App configuration
const app = express();
const server = createServer(app);
const io = ioDefault(server);
const port = process.env.PORT || 8080;

// Middlewares
app.use(cors());
app.use(express.json());
app.use(morgan("combined"));
// ...

更新:

问题是在同一端口上运行的另一台服务器。若要检查在特定端口上运行的进程,请执行以下操作

netstat -anpe | grep "8080" | grep "LISTEN"

如果netstat未安装,则在基于debian的系统中运行sudo apt install net-tools (ubuntu、fedora等)

然后,您可以用它的pid杀死它:

kill -9 5454

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67042921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档