最近楼主本人自己在学习socket,然后遇到了如下的需求,但是也出了如下的问题,网上一直没找到答案,还请懂的人告诉下,是什么原因?
应用场景:其实就是从多个socket客户端发送数据到单个socket服务器端,只是并发量不低,可能每秒有1000多个。
解释:其实多个客户端就是指多个项目,但是发布以后都是部署在同一个服务器上的
而单个socket服务器端指的就是另外一台服务器上了。
我的设计上这样的:在服务器上写了一个异步的socket服务端来监听数据,而在客户端写了一个发送信息的socket。每次发送一条信息就会有一个从创建到关闭socket的过程,每秒1000多条 就相当于1000多次这个过程,而且还有N个socket客户端。
但是运行下来发现,客户端有时候会链接不上服务器端,而且单位时间内,服务器端能接收到的客户端发送过来的信息也越少了。
比如在服务器端刚运行的1分钟 能收到5000条数据,那么下一分钟就只有2500条,在下一分钟只有12500条,最后稳定在200多条,但其实客户端产生的连接数远远超过这个数量,如果我重启服务端,又会回到第一分钟接受的5000的怪圈中
我想求教下,这到底是不是因为socket的并发问题呢,到底是和服务器端有关还是和客户端有关呢?
在服务器上写了一个异步的socket服务端来监听数据,而在客户端写了一个发送信息的socket。每次发送一条信息就会有一个从创建到关闭socket的过程,每秒1000多条 就相当于1000多次这个过程,而且还有N个socket客户端。
但是运行下来发现,客户端有时候会链接不上服务器端,而且单位时间内,服务器端能接收到的客户端发送过来的信息也越少了。
通常情况下,SOCKET编程,很少人会连接...断开...连接...断开...,SOCKET适合于长连接,如果你的业务场景是不需要客户端与服务端长期进行连接的,比如有的是半小时联系一下服务端,有的是两天联系一下服务端,那就建议你采用其他方式。
连接是一个比较消耗资源的操作,所以一旦连接,就不主动断开了。
另外,SOCKET编程确实是一件很费经验的事,这个时间长度是以年来计算,而不是以天来计算的,
所以如果你需要大量的连接用于业务,可能找个有经验的好过你自己研究三五年。
当然,作为学习,无可厚非。
是你还不熟悉,掌控不了socket。
要是你用socket类来写,不用第三方框架,没有一定的经验是掌控不好的。
这就是为什么写服务端的人值钱。
那么socket的第三方框架有哪些呢
@海神解说:自己去搜。懒得要端到嘴边才行。
你有监控过服务端的CPU使用效率吗?如果这个CPU在SOCKET开起来之后上升的很快,一般这种问题可能是异步的时候没有设置sleep时间导致的
建议你去 github 上找开源的组件, socket 自己写很不好写的
1:服务器socket要开多线程来接受 当服务器繁忙 是会存在数据丢失
2:socket有沾包 并包 的情况 解决版本 采用协议 (类似http协议一样) 具体例子 7E 消息ID 消息属性 流水号 内容 效验 7
E结尾
3:前面的几个说的对 socket确实是门深的技术 。 不过都有个学习的过程
关注一下 最近在做类似的项目