首页
社区
课程
招聘
[求助]高并发tcp长连接用select模型适合吗
发表于: 2020-10-26 08:29 3794

[求助]高并发tcp长连接用select模型适合吗

2020-10-26 08:29
3794

如题,obd设备,基本都是tcp长连接,设备数量大概5000多,所有通信都是tcp长连接,包括心跳也是。求教这个适合netty这种nio吗?


[课程]Android-CTF解题方法汇总!

最后于 2020-10-26 08:29 被白菜大哥编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 5008
活跃值: (1147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
netty nio不了解,但是select应该不好用,当然还要看你机器的资源,及设备消息交互的数据量,如果是我,我会用libevent(不懂java。。。。)
2020-10-26 09:22
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
dabang netty nio不了解,但是select应该不好用,当然还要看你机器的资源,及设备消息交互的数据量,如果是我,我会用libevent(不懂java。。。。)
libevent在win上,也是select模型,说白了就是nio。。。很痛苦
2020-10-26 09:41
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
libuv
2020-10-26 10:22
0
雪    币: 3848
活跃值: (642)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
不够的话就用IOCP模型吧
2020-10-26 10:40
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
病毒小子 不够的话就用IOCP模型吧
原生的iocp确实可以。看了下楼上的libuv,在win上也是iocp的。可以试试libuv
2020-10-26 10:58
0
雪    币: 8599
活跃值: (5065)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
linux 用epoll,windows用iocp
2020-10-26 16:35
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
sunsjw linux 用epoll,windows用iocp
谢谢。试了下。现在的服务器,32线程(16核),netty(即nio模型),简单echo服务器,全部使用tcp连接,不允许断,不到2000的并发量,多了会丢数据。如果再加入其他协议解析部分,估计会更低
2020-10-26 17:06
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你问的是设备的还是服务器的
2020-10-26 21:29
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
mb_foyotena 你问的是设备的还是服务器的
设备没法改了,厂家都是这样做的。。
2020-10-26 23:39
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
IOCP或者一些开源的封装库,如HP-Socket
2020-10-29 16:02
0
雪    币: 52
活跃值: (210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
t-io或者smart-tio
2020-11-2 01:18
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13

能支持多少并发连接主要看你流量有多大。如果没什么流量,比如就是IOT流量。那随随便便什么模型都可以。你可以拿nginx测试,nginx在windows上就是select。send recv肯定是没问题,只是客户端多了connect/accept会失败,可能需要重试几次就连上了。

Windows 上最好用的是iocp,Linux 上是epoll,这是毋庸置疑的,但是两者有明显不同,iocp在完成时就已经io结束,而epoll则只是事件通知你可读可写。如果要设计成跨平台的话,建议将epoll封装成iocp的样子,虽然目前好像没人这样做。如果说像redis那样,为了迁就unix的poll/epoll通知模型,用iocp投递0字节读拿可读通知,或者post事件拿可写通知,那么性能将非常低,甚至不如select模型。大部分做跨平台开发的都是unix主导,他们不懂iocp,例如nginx,多少年过去了,他都没有支持iocp。redis对iocp有支持,libuv也有,但是就我上面说的问题,虽然实现了iocp,但是性能低。

最后于 2020-11-3 10:39 被MengXP编辑 ,原因:
2020-11-3 10:35
0
游客
登录 | 注册 方可回帖
返回
//