使用Fleck作为websocket服务时遇到的问题

99guo 2016-05-26 12:02:39
我在使用Fleck作为websocket服务时遇到一个问题。具体就是当有成千上万个客户端连接由于网络原因突然断网1到2秒,此时Fleck服务端会触发批量断开连接错误,这段抛出异常错误时间会持续很久几分钟到半个钟不等,在这段时间内就算网络已经正常了,服务器也无法响应连接请求,造成用户无法连接。

故障重现方法:使用Fleck做一个服务端,再做一个客户端程序批量建立几千个链接,然后使用任务管理器直接杀死客户端程序。就可实现此故障。

请问大神们有没遇过到,怎样解决。
...全文
1615 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a472544436 2020-06-01
  • 打赏
  • 举报
回复
wifi连接的时候他有2个地址
a472544436 2020-06-01
  • 打赏
  • 举报
回复 1
Fleck WEBSOCKET是个大深坑,你一定要注意网络连接,如果你的电脑网线和wifi一起亮着,那你就要注意了,他在不断切换地址
99guo 2016-06-02
  • 打赏
  • 举报
回复
准备结贴了。进来留言的前3位,我散分给他。
99guo 2016-06-01
  • 打赏
  • 举报
回复
经对Fleck代码浏览和测试及对socket的APi测试,发现问题在于Socket的异步接收时大量连接断开抛出的错误会影响其异步的执行(估计是线程池的共用问题,错误要回收资源吧,反正楼主无办法解决)。但如果每个连接都开个线程单独连接使用socket的阻塞模式接收就能立即响应,但这样不能完成大量在线连接,原因是系统有线程数量限制。 最后使用最笨的方法解决,在系统出现断网等异常大批量错误抛出时,把自己的进程杀死,再自行重启服务达到快速恢复状态。
99guo 2016-05-26
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
在反复创建、断开的连接数不大于 99 的情况下,是非常稳定的,可以随时 断开随时重建,不会出现问题。 你可以调试一下 fleck 在连接数恰好达到100 时干了什么事情。 你也可以换一种 websocket 服务框架,还是可以找到其它的 .net 框架的。 而且 .net framework 中也内置有 websocket 服务,用起来稍微繁琐。
如果是2000个连接批量断开,我这要等待它起码1分用户才能重连。关键我这还不止2000个连接达到了万个连接以上,这时造成的批量断开会出险严重的无法连接情况。最快的处理方法是手工重启服务,不等Fleck的服务自动回收资源恢复。 也测试过与我的代码无关,与Fleck的框架有关,我测试只做一个批量建立连接动作和杀死客户端批量连接,立即再使用客户端重连就要一直等很长时间才能连接。
  • 打赏
  • 举报
回复
当客户端连接中断时,我们的服务器端也会去到一个大的集合里边去清理相关的连接对象,也是需要花时间的。但是这并没有造成什么卡顿。你可以试试看将你的服务器端另外简化实现一个只有10几行代码的版本,看看是 Fleck 框架的问题还是自己的服务器业务处理的设计问题。
  • 打赏
  • 举报
回复
嗯,我们之前的测试环境是在1~99个连接之间进行测试,非常稳定,无需重新连接。 我刚按照你说的测试方式试了一下,一次for循环创建2000个连接,并且当出错时重新连接(因为服务器会在大量连接到来时暂时返回异常,因此需要重连),可以保证连续创建2000个连接,并且写数据、再读数据。 我按照你的方式,直接杀掉进程,然后重启客户端测试程序,反复试验了,客户端进程一启动就能从服务器端调试窗口打印 log 信息,没有出现卡的现象。
  • 打赏
  • 举报
回复
在反复创建、断开的连接数不大于 99 的情况下,是非常稳定的,可以随时 断开随时重建,不会出现问题。 你可以调试一下 fleck 在连接数恰好达到100 时干了什么事情。 你也可以换一种 websocket 服务框架,还是可以找到其它的 .net 框架的。 而且 .net framework 中也内置有 websocket 服务,用起来稍微繁琐。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧