php swoole 触发采集,swoole的onreceive不触发_PHP开发框架教程,swoole

0d465be20968512a103361f656690781.png

onReceive

接收到数据时回调此函数,发生在worker历程中。函数原型: (引荐进修: swoole视频教程)

function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data);

$server,Server对象

$fd,TCP客户端衔接的唯一标识符

$reactor_id,TCP衔接地点的Reactor线程ID

$data,收到的数据内容,多是文本或许二进制内容

关于$fd和$reactor_id 细致的诠释

未开启自动协定选项,onReceive单次收到的数据最大为64K

开启了自动协定处置惩罚选项,onReceive将收到完全的数据包,最大不凌驾 package_max_length

支撑二进制花样,$data多是二进制数据

运用底层供应的open_eof_check/open_length_check/open_http_protocol,能够保证数据包的完全性

不运用底层的协定处置惩罚,在onReceive后PHP代码中自行对数据分析,兼并/拆分数据包。

比方:代码中能够增添一个 $buffer = array(),运用$fd作为key,来保留上下文数据。 每次收到数据举行字符串拼接,$buffer[$fd] .= $data,然后在推断$buffer[$fd]字符串是不是为一个完全的数据包。

默许情况下,同一个fd会被分配到同一个Worker中,所以数据能够拼接起来。运用dispatch_mode = 3时。

要求数据是抢占式的,同一个fd发来的数据大概会被分到差别的历程。所以没法运用上述的数据包拼接要领

关于粘包问题如SMTP协定,客户端大概会同时发出2条指令。在Server中大概一次性收到,这时候应用层须要自行拆包。SMTP是经由过程\r\n来分包的,所以营业代码中须要 explode("\r\n", $data)来拆分数据包。

如果是要求应对式的效劳,无需斟酌拆分数据的问题。原因是客户端在提议一次要求后,必需比及效劳器端返回当前要求的相应数据,才会提议第二次要求,不会同时发送2个要求

以上就是swoole的onreceive不触发的细致内容,更多请关注ki4网别的相干文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值