一个 Java 项目如果需要启用上万个 websocket,有什么好办法么

2020-02-26 10:16:52 +08:00
 Drinker

大概是这样,对方有个 api,这个 api 对应的参数有个上万个,每个参数对应一个 websocket,现在要做的是拿到参数,每个参数启动一个 websocket 去保存发送下来的数据,保存现在使用消息队列应该没什么问题,就是如果启动了上万个 websocket 会不会内存直接爆炸?或者还是有没有其他的办法,老哥们。

12894 次点击
所在节点    Java
92 条回复
GM
2020-02-26 10:24:57 +08:00
你不会做个遍历一个一个去连接吗?
misaka19000
2020-02-26 10:24:59 +08:00
测一下不就知道了
sudodo
2020-02-26 10:28:46 +08:00
上万个 ws,一台服务器是不可能的啊……
Drinker
2020-02-26 10:30:00 +08:00
@GM 连接么可以连接,关键问题是内存会不会爆掉,现在在做技术方案,上万个 websocket,且每个 websocket 同一时间很大概率会有信息传过来,所以性能这块需要考虑一下。所以问问各位老大哥有没有什么好办法。
lbfeng
2020-02-26 10:30:32 +08:00
不是每个 websocket 链接占一个端口么?
misaka19000
2020-02-26 10:30:57 +08:00
你测一下每个 ws 要多少内存,然后算一下不就知道内存够不够了
Drinker
2020-02-26 10:31:03 +08:00
@misaka19000 上万个 websocket,且每个 websocket 同一时间很大概率会有信息传过来,感觉不用测,性能可能有点悬,所以咨询一下各位老大哥。
misaka19000
2020-02-26 10:31:35 +08:00
@lbfeng #5 每个 ws 占一个 fd,所有的 ws 可以共用一个端口啊
binux
2020-02-26 10:33:18 +08:00
你问下对面是怎么做到同时支持上万个 websocket 的。
GM
2020-02-26 10:33:37 +08:00
说实话,你们这个获取数据方式有点奇葩。
Drinker
2020-02-26 10:34:14 +08:00
@sudodo 我也感觉不行,如果多台服务器,类似这种案例这个有没有现有的解决方案,老哥。
Vegetable
2020-02-26 10:35:26 +08:00
@lbfeng 你说的好像是出口,服务端就开一个吧
Drinker
2020-02-26 10:35:45 +08:00
@lbfeng 一个端口就可以了。
GM
2020-02-26 10:36:12 +08:00
先把每个参数丢到一个队列里去,然后做个 100 线程的线程池,每个线程做个死循环从队列拿参数、启动 ws 获取数据、关闭 ws,保证内存不爆。

如果内存足够,那就启动 500、1000 个线程。
Drinker
2020-02-26 10:37:03 +08:00
@misaka19000 嗯,内存这个可以测试看看,如果每个 websocket 同一时间数据量很大,cpu 也是一个问题,麻烦。
ryd994
2020-02-26 10:38:57 +08:00
讲道理,这不就是 C10K 问题?
Drinker
2020-02-26 10:38:57 +08:00
@binux 这个方法可以,可以问问对面技术是咋做到的,(*^_^*)
janxin
2020-02-26 10:39:59 +08:00
内存可以估算出来的,会不会爆炸也不知道你的内存多少啊...
Drinker
2020-02-26 10:40:18 +08:00
@GM 对方提供获取数据方法就这些,而且数据还是实时的,就是现在如果你不连接获取到数据,时间已过就没数据啦。
Drinker
2020-02-26 10:41:41 +08:00
@janxin 嗯,cpu 这个也是个问题,同一时刻,有个几千个 websocket 同时有数据过来,内存不炸,cpu 也不会爆满吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX