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

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

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

12564 次点击
所在节点    Java
92 条回复
onion83
2020-02-26 16:19:55 +08:00
我觉得沟通是不是有点问题?把 webscoket 当 http 来玩了?一般的使用方法都是建立一次连接,然后不断收发数据就好了,同步响应还是异步响应,这个要看业务,连接是可以复用的。
wufakeyou
2020-02-26 16:36:51 +08:00
生产环境,C#+阿里云 4 核 8G,8000 个 socket 在线,资源占用 30%左右。对物联网项目来说,1W 个 socket 规模其实很小了。
Drinker
2020-02-26 17:15:47 +08:00
@tairan2006 好呢,有方向就好,我们先去看看。
@pinews 如果说频道的话不太准确,大概就是如果 type=1 那么对面服务会把对应的 1 的数据传过来,如果是 2 那么对应的数据就是 2,但是不能说传 type=1,2 这种,他们会认为 type 是非法的。
@zfish 好的,谢谢提供思路,我们去看看。
@no1xsyzy 谢谢提供思路。
@SjwNo1 哈哈,好呢,我们去看看相关的资料。
@lfcyme 好的,谢谢提供思路。
@onion83 大概就是如果 type=1 那么对面服务会把对应的 1 的数据传过来,如果是 2 那么对应的数据就是 2,但是不能说传 type=1,2 这种,他们会认为 type 是非法的。所以每一个 type 的值,都对应一个 ws 连接。每个 ws 连接自行接收数据。
@wufakeyou 好的,谢谢提供案例,我们这边做下技术调研。
cz5424
2020-02-26 17:16:13 +08:00
golang,1w 小意思
cz5424
2020-02-26 17:17:41 +08:00
@wufakeyou 同物联网,1w+, 低于 30%,golang,tcp
monkeyWie
2020-02-26 17:43:12 +08:00
java 上 netty 轻松搞定好吧
pythonee
2020-02-26 20:25:31 +08:00
云服务 api gateway ?
wellsc
2020-02-26 20:33:44 +08:00
扔给 nginx 处理
laozhang
2020-02-27 03:17:01 +08:00
32g 的机器 100 万 ws 连接应该没问题。对 我说的单机。go 写的。
barbery
2020-02-27 09:43:22 +08:00
换 go
sicauxeon
2020-02-27 13:51:02 +08:00
经典的 C10K 问题。但是看你具体的使用场景,如果不行的话,就负载均衡做吧。
lixm
2020-02-27 17:50:48 +08:00
楼主这个是客户端啊, 单机不够就堆机器呗, 还不至于 C10K

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

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

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

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

© 2021 V2EX