管理 Netty 的 channel 问题

2018-09-04 16:30:03 +08:00
 tobychen1991

netty 里的 channel 既然不能序列化,请问大家是怎样实现管理,共享 channel 的呢? 总感觉用 ConcurrentHashMap 会有瓶颈,数量上去就承受不了

4135 次点击
所在节点    程序员
11 条回复
BBCCBB
2018-09-04 16:44:06 +08:00
ConcurrentHashMap 能有什么瓶颈, 内存够他就能承受
tobychen1991
2018-09-04 16:59:46 +08:00
@BBCCBB 就是怕内存不够呀,如果扩展多台机器就需要共享了
hand515
2018-09-04 17:11:21 +08:00
Channel 是对一个链接的抽象吧
xiongzhen
2018-09-04 17:12:29 +08:00
上层拓展一个管理节点管理下面的子节点就好了
linbiaye
2018-09-04 17:20:14 +08:00
为啥要用感觉,预估一下规模,直接测试不就是了?
BBCCBB
2018-09-04 17:23:39 +08:00
@tobychen1991 不需要共享啊. 长连接和 http 这种不太一样的, 长连接连接上之后就连固定的 socket 了,这个和 http 每次都需要单独发起请求,单独 proxy 到机器不一样.
anthow
2018-09-04 17:28:40 +08:00
@tobychen1991 你这是有多少链接啊。。。还怕内存不够
xuqd
2018-09-04 17:31:33 +08:00
我记得 Netty 本身有个 ChannelPool 类似与连接池的可以使用
seancheer
2018-09-04 17:48:23 +08:00
担心单个 map 数量太多效率问题,那就一个 map 存 5w 个,弄 10 个 map,然后在外层结合自己业务场景 hash 到这 10 个 map。

50w 个还不够就以此类推下。。实际上 map 一次 put 和 get 也就几十 us,数量多了效率也不会太差。
252748371
2018-09-04 17:58:46 +08:00
你可以算算一个 Channel 占得内存大小,1 台机器你维持 100W 个 Channel,瓶颈已经是 linux 最大文件句柄数了,而且 100W 个 Channel 已经算很厉害了
goinghugh
2018-09-05 09:51:11 +08:00
ChannelGroup 接口可以了解一下,感觉你想说的是怎么集群吧?

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

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

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

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

© 2021 V2EX