tcp 开发高性能服务器

发布于 2022-10-15 08:41:10 字数 414 浏览 26 评论 0

请问:

     一个服务端程序,一个客户端程序,两边都只做简单的读写,
     服务端预启动3个进程,客户端并发向服务器发送500 至 3000次做压力测试,
     客户端总是会收到3到10次的错误:

     1、errno=3426 A connection with a remote socket was reset
     2、errno=3455 Broken pipe

       尤其是第一种情况出现的次数比较多,请问是什么原因,如何解决,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

偷得浮生 2022-10-22 08:41:10

只有一个客户端,服务端多进程有啥用?

肥爪爪 2022-10-22 08:41:10

问题1.  原因: 服务器承受不了压力, 等待处理的连接过多.
           解决办法, 服务端:增加并发处理的进程数. 客户端:降低压力,调整发送间隙.

问题2.  原因: 向已经关闭连接的SOCKET发送数据, 其根原因在于1
           解决办法: 1.解决问题1的问题, 2. 客户端进程忽略此消息(SIGPIPE)

烟柳画桥 2022-10-22 08:41:10

twice write to a closed fd。 楼上说了 忽略SIGPIPE信号即可。

那小子欠揍 2022-10-22 08:41:10

有没用epoll或者select,用这两个比直接accept效果会好。

小鸟爱天空丶 2022-10-22 08:41:10

谢谢楼上的回答,直接用的acept,recv,send。两边都是sen和recv

服务端和客户端就是 简单的读写,我想测试服务端起3个进程,
然后客户端并发向服务端访问,服务器能承受多大的压力,

在服务端有3个进程的情况下,客户端并发数能到多少,各位有个经验值吗,谢谢

你与昨日 2022-10-22 08:41:10

并且我在测试另一个服务程序时,并发数3000,客户端都不会返回错误,但那个服务程序没有源码,不知道怎么弄的,只是发现服务进程用重起的情况,而我这个服务程序没有。

遥远的绿洲 2022-10-22 08:41:10

如果要支持大数量并发,最好用epoll

随心而道 2022-10-22 08:41:10

理论上支持的并发数: 工作进程数+连接缓冲队列长度(listen函数的第2个参数)
3000个并发连接? 用单台客户端电脑是压不出来的..

服务进程重起指的是什么? 是指地址重用(SO_REUSEADDR),和端口重用(SO_REUSEPORT)么? 这两个参数和压力无关, 只是让你的服务不必等上次处于TIME_WAIT状态的连接消失就能起动服务.

蓝眼睛不忧郁 2022-10-22 08:41:10

第二种是连接已关闭,无效的socket句柄

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文