搜索
bottom↓
回复: 27

如何增大socket客户端连接数

[复制链接]

出0入0汤圆

发表于 2014-10-24 17:38:55 | 显示全部楼层 |阅读模式
         我们有一个固定IP,其中一个端口连接了500个DTU,采用的是短连接方式,感觉闲杂接收的速度很慢,像是阻塞了,像这个连接方式能连接多少个DTU呢,有什么办法提高连接容量吗?

出1070入962汤圆

发表于 2014-10-24 18:12:30 | 显示全部楼层
换完成端口加重叠IO模型,不要说500,就是5万都很轻松。

还有,尽量长连接,减少短连接。

出0入0汤圆

发表于 2014-10-24 18:17:23 | 显示全部楼层
windows好像有个“完成端口”之类的网络编程结构吧,就是处理这种方式的

出300入477汤圆

发表于 2014-10-24 18:24:37 | 显示全部楼层
最简单的,别用TCP了,改用UDP就行了
不管你多少DTU模块,电脑只要1个socket,来了数据包就收,该怎么处理就处理,没什么额外开销~

我们自己的GPRS模块就是这么做的
但是重发什么的你得自己处理。

出870入263汤圆

发表于 2014-10-24 20:00:14 | 显示全部楼层
本帖最后由 armstrong 于 2014-10-24 20:01 编辑

楼上个个说得都是金玉良言。可万一人家根本不是运行的windows呢

出300入477汤圆

发表于 2014-10-25 18:01:16 | 显示全部楼层
armstrong 发表于 2014-10-24 20:00
楼上个个说得都是金玉良言。可万一人家根本不是运行的windows呢 ?

谁告诉你不是windows就没有socket的??

出870入263汤圆

发表于 2014-10-25 20:52:30 | 显示全部楼层
redroof 发表于 2014-10-25 18:01
谁告诉你不是windows就没有socket的??

其它系统有完成端口?

出0入0汤圆

发表于 2014-10-25 22:26:43 | 显示全部楼层
armstrong 发表于 2014-10-25 20:52
其它系统有完成端口?

他说的是UDP,socket这些linux下也是一样的,IOCP完成端口linux下也有类似的,比如Epoll.

出0入0汤圆

发表于 2014-10-25 23:45:39 | 显示全部楼层
windows下可以用完成端口,
linux根据支持状况,选择select,poll或者epoll了。

出0入17汤圆

发表于 2014-10-26 08:59:19 来自手机 | 显示全部楼层
完成端口  学习了

出0入0汤圆

发表于 2014-10-26 11:00:08 | 显示全部楼层
普通的linux web server做得到socket连接吗?

出0入0汤圆

发表于 2014-10-26 11:56:58 | 显示全部楼层
windows下可以用完成端口,理论可以支持6w多个长连接,但是由于受限于硬件及网络带宽的原因,一般在5k~10k之间就算非常好了,这个你看游戏里边的分区就知道了

出0入0汤圆

发表于 2014-10-26 11:57:50 | 显示全部楼层
另外你看做的不错的宏电的dtu,实际也就支持512个

出300入477汤圆

发表于 2014-10-26 20:02:29 | 显示全部楼层
如果有可能,改UDP吧,支持几千个模块很easy
其实对udp,你有多少个模块根本就不是问题,只要你的服务器带宽够就行了,别的没限制。
仅仅需要最简单的服务器程序:开3个线程,一个线程收包,丢到缓存队列里,第二个线程处理包,应答丢到另一个缓存队列里,第三个线程负责发回应答就行了。
就这么简单的结构,对UDP足够用到你的网络带宽或者CPU耗尽,不必再费事做其它的复杂结构,比如麻烦的IOCP。。。。。

出0入0汤圆

发表于 2014-10-26 20:52:48 来自手机 | 显示全部楼层
完成端口~~~Mark~~~

出0入0汤圆

 楼主| 发表于 2014-10-27 13:06:18 | 显示全部楼层
Appcat 发表于 2014-10-24 18:12
换完成端口加重叠IO模型,不要说500,就是5万都很轻松。

还有,尽量长连接,减少短连接。 ...

UTD安装到全国各地了,设置的就是短链接 没法改了。谢谢你的帮助

出0入0汤圆

 楼主| 发表于 2014-10-27 13:07:27 | 显示全部楼层
咖啡可乐 发表于 2014-10-24 18:17
windows好像有个“完成端口”之类的网络编程结构吧,就是处理这种方式的

受教了,谢谢你,就是不知道在不改动DTU的的前提下,能不能实现

出0入0汤圆

 楼主| 发表于 2014-10-27 13:08:16 | 显示全部楼层
redroof 发表于 2014-10-24 18:24
最简单的,别用TCP了,改用UDP就行了
不管你多少DTU模块,电脑只要1个socket,来了数据包就收,该怎么处理 ...

改不了了,为了数据的完整性,选择了TCP短链接

出0入0汤圆

 楼主| 发表于 2014-10-27 13:08:46 | 显示全部楼层
armstrong 发表于 2014-10-24 20:00
楼上个个说得都是金玉良言。可万一人家根本不是运行的windows呢 ?

是WIN的服务器

出0入0汤圆

 楼主| 发表于 2014-10-27 13:09:11 | 显示全部楼层
farmerzhangdl 发表于 2014-10-26 11:56
windows下可以用完成端口,理论可以支持6w多个长连接,但是由于受限于硬件及网络带宽的原因,一般在5k~10k ...

能到1千就可以,谢谢你

出0入0汤圆

 楼主| 发表于 2014-10-27 13:09:42 | 显示全部楼层
redroof 发表于 2014-10-26 20:02
如果有可能,改UDP吧,支持几千个模块很easy
其实对udp,你有多少个模块根本就不是问题,只要你的服务器带 ...

没法改了

出10入61汤圆

发表于 2014-10-27 13:37:31 | 显示全部楼层
2005n2005 发表于 2014-10-26 11:00
普通的linux web server做得到socket连接吗?

PHP也有SOCKET的,最新技术还有个WEBSOCKET的东西

出0入0汤圆

发表于 2014-10-27 13:58:30 | 显示全部楼层
完成端口,mark

出0入0汤圆

发表于 2014-10-27 16:20:40 | 显示全部楼层
boost::io 就可以了,可移植性没的说。这么点客户端轻松支持。

出1070入962汤圆

发表于 2014-10-27 16:27:38 | 显示全部楼层
zhanglu1990 发表于 2014-10-27 13:07
受教了,谢谢你,就是不知道在不改动DTU的的前提下,能不能实现

直接修改服务器模型就可以,短连接跑几百个还是很轻松的。

出0入4汤圆

发表于 2017-2-6 21:37:39 | 显示全部楼层
完全端口 mark

出0入0汤圆

发表于 2017-2-7 17:53:56 来自手机 | 显示全部楼层
单纯tcp服务器连接没上万,都不是好服务器

出0入0汤圆

发表于 2017-2-7 17:54:29 来自手机 | 显示全部楼层
楼主你应该用高并发模型
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 22:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表