入门指引 Server Client Process AsyncIO Memory HttpServer WebSocket 高级 其他

发布于 2015-08-09 09:48:02 | 87 次阅读 | 评论: 0 | 来源: 网络整理

在外网通信时,有些客户端发送数据的速度较慢,每次只能发送一小段数据。这样onReceive到的数据就不是一个完整的包。 还有些客户端是逐字节发送数据的,如果每次回调onReceive会拖慢整个系统。

Swoole提供了buffer和eof_check的功能,在C扩展底层检测到如果不是完整的请求,会等待新的数据到达,组成完成的请求后再回调onReceive。

在swoole_server_set中增加,open_eof_check和package_eof来开启此功能。open_eof_check=1表示启用buffer检查,package_eof设置数据包结束符。查看详细说明

buffer功能会将所有收到的数据放到内存中,会占用较多内存
通过设置 package_max_length 来设定每个连接最大缓存多少数据,超过此大小的连接将会被关闭
1.6.12前的版本,onReceive仍然是分段读取。1.6.12后onReceive会一次性返回所有数据

示例:

swoole_server_set($serv, array(
    'timeout' => 2.5,  //select and epoll_wait timeout. 
    'poll_thread_num' => 2, //reactor thread num
    'writer_num' => 2,     //writer thread num
    'worker_num' => 4,    //worker process num
    'backlog' => 128,   //listen backlog
    'max_request' => 50,
    'dispatch_mode'=>1, 
    'package_eof' => "rnrn",  //http协议就是以rnrn作为结束符的,这里也可以使用二进制内容
    'open_eof_check' => 1,
));
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务