tcp 开发高性能服务器
请问:
一个服务端程序,一个客户端程序,两边都只做简单的读写,
服务端预启动3个进程,客户端并发向服务器发送500 至 3000次做压力测试,
客户端总是会收到3到10次的错误:
1、errno=3426 A connection with a remote socket was reset
2、errno=3455 Broken pipe
尤其是第一种情况出现的次数比较多,请问是什么原因,如何解决,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
只有一个客户端,服务端多进程有啥用?
问题1. 原因: 服务器承受不了压力, 等待处理的连接过多.
解决办法, 服务端:增加并发处理的进程数. 客户端:降低压力,调整发送间隙.
问题2. 原因: 向已经关闭连接的SOCKET发送数据, 其根原因在于1
解决办法: 1.解决问题1的问题, 2. 客户端进程忽略此消息(SIGPIPE)
twice write to a closed fd。 楼上说了 忽略SIGPIPE信号即可。
有没用epoll或者select,用这两个比直接accept效果会好。
谢谢楼上的回答,直接用的acept,recv,send。两边都是sen和recv
服务端和客户端就是 简单的读写,我想测试服务端起3个进程,
然后客户端并发向服务端访问,服务器能承受多大的压力,
在服务端有3个进程的情况下,客户端并发数能到多少,各位有个经验值吗,谢谢
并且我在测试另一个服务程序时,并发数3000,客户端都不会返回错误,但那个服务程序没有源码,不知道怎么弄的,只是发现服务进程用重起的情况,而我这个服务程序没有。
如果要支持大数量并发,最好用epoll
理论上支持的并发数: 工作进程数+连接缓冲队列长度(listen函数的第2个参数)
3000个并发连接? 用单台客户端电脑是压不出来的..
服务进程重起指的是什么? 是指地址重用(SO_REUSEADDR),和端口重用(SO_REUSEPORT)么? 这两个参数和压力无关, 只是让你的服务不必等上次处于TIME_WAIT状态的连接消失就能起动服务.
第二种是连接已关闭,无效的socket句柄