并发10万TCP连接的测试

代码在examples/c10k.php中,本测试启动10个子进程,发起长连接到SwooleTCP Server.

由于单台机器的原因,ip_local_port_range的范围是32000-60000。 运行到28000个长连接时,由于local port不够用,无法再继续连接。

并发测试中使用4台客户端机器同时连接服务器,每台机器与服务器建立2.8WTCP连接。TCP Server共维持了11.2W长连接。

Swoole使用epoll作为事件轮询,可维持大量TCP连接。只要操作系统的内存足够,就一直可以增加维持的TCP长连接。

swoole_server每个连接所占用的内存为220字节,使用数据缓存,如EOF_CHECK/LENGTH_CHECK后可能会增加到每连接8K



  • shuter

    如果用来开发游戏,2000 socket连接能支撑长时间运行吗?

  • 韩天峰_PHP_Swoole

    2000连接不是什么难题,没问题。

  • 麻雀在庭院嘻闹盛开的乔治亚

    我觉得swoole很厉害,就是生不逢时,现在大多数网站对这么高的并发还没要求,但是机会就是留给坚持和忍耐的人的,我准备开始学习swoole了

  • 000

    000

  • 21

    为什么这么少的评论呢? 是不是没有人用这个东西呀。在百度也没有什么答案的

  • 屏风山下的猎人

    已经在学习了,只是应用场景还需要自己慢慢的体会和摸索

  • 蔡小勋

    真的很不错。学习使用中

  • 陈鹏

    韩老师,服务端只开一个监听端口,如果一个客户端连接过来了,服务端要不要开启一个临时端口和客户端进行通信啊?

  • luckyqiao

    应该是不用的,服务器直接使用监听端口和客户端通信

  • 明夕何夕.

    请问压力测试的方案是怎么实施的呢? 如果不使用第三方工具和ab之流. 是否有更便捷的测试方法?

  • 红豆先生

    我发现不管是使用ab压力测试工具还是使用c10k.php测试脚本,都没有反应。ab测试工具还好。脚本测试服务器没有反应,断开连接,我有打印链接数量。但是都没有打印数量。

  • 山鲁佐德

    像这样说一个tcp就220KB , 2.8W个就要大约6G内存了吧

  • 将今生今世

    swoole_server每个连接所占用的内存为220字节 >>> 220字节= 220B

  • 水云

    C10k的并发测试用的是SWOOLE_SOCK_SYNC, 循环发起长连接的时候 怎么确认前面的长链接没有关闭? 我从sever往client发送数据的时候说是client这边已经close了。

  • jichengyang

    这种比较意义不大 而且很多人得出了 golang的性能比swoole好 虽然我没亲手试过 还有如果swoole作web服务器,实际使用中 还是配合nginx(代理swoole服务) ;swoole对于我们phpcoder 是很好的福利了 学习是必然的