1
ericls 2021-02-17 23:12:29 +08:00 via iPhone
断开连接之后 应该自动释放资源的 是不是有东西再断开连接后还存在 reference?
|
2
superrichman 2021-02-17 23:18:45 +08:00 via iPhone
我在 windows 上遇到过类似的资源不释放问题,换 linux 就没问题了
|
3
miniyao OP @ericls setInterval 是强制重连(类似心跳),因为也不知道之前的连接是否还存活。
服务端只知道新连接建立成功了,之前的连接丢失了(之前的连接没有发送任何数据,和网络异常断线一样) |
4
miniyao OP @superrichman 是在 linux 服务器上跑的,只是看着内存在持续增长,资源不释放,眼看就要溢出的
|
5
yuelang85 2021-02-17 23:32:38 +08:00
是否用了连接池?连接池如何管理的?在链接断开时是否没有释放连接池里的引用?
是否写了 close 方法? 没有释放,肯定是某地方还存有引用。 最好贴出代码。 |
6
miniyao OP |
7
yuelang85 2021-02-18 00:12:31 +08:00
@miniyao 不是的。重连不是恢复断开的链接,而是重新建立链接,之前的那个链接就被抛弃了。
你是用的 geventwebsocket 吗?看看 WebSocketHandler 实例的 server.clients 里面是不是有废掉的链接?我查了一圈代码,没有找到这货 release 的地方,可能需要手动 release 一下。 |
9
Akkuman 2021-02-18 01:35:33 +08:00 via Android
加心跳,服务端超时丢弃链接
|
10
abersheeran 2021-02-18 11:09:27 +08:00 2
WebSocket 是自带心跳帧的,不存在服务端不知道客户端已经断线了的情况。
|
11
miniyao OP @yuelang85 是 gevent 的,py 版只有 gevent 和 asyncio 两种主流实现吧,我也没看到销毁方法
@abersheeran 断线知道状态,没看到自动销毁已废弃 socket 的方法(不知道系统什么时候回收内存,现在就是看着内存慢慢涨)。 |