PHP异步非阻塞之路

需求

一个简单的需求,提交大量数据到远程服务器,此时并不需要等待返回。
另一个需求,获取API数据,同时查询数据库,并行处理,加快响应速度。

配置问题

set_time_limit
ignore_user_abort

fastcgi_finish_request

只是结束会话后继续执行,并没有并发,勉强非阻塞

curl

无法非阻塞,只能等待,可以并发
https://github.com/guzzle/guzzle/issues/1127

fsockopen

坑最多的地方
首先,fwrite并不都是成功的,返回写入的字节数,并不是全部
其次,PHP的bug,stream_set_blocking设置非阻塞,须等待才能写入,7.0.x以上才解决,https://github.com/php/php-src/pull/2330

Warning: fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error: 1409F07F: SSL routines: SSL3_WRITE_PENDING: bad write retry

再次,Keep-Alive的坑,需要比对Content-Length和返回长度,然后断开
最后,Transfer-Coding的值如果为Chunked,需要拼接返回结果
pfsockopen,需要使用Keep-Alive,并且不能close链接

其他

异步框架:swoole。。。
计划任务:redis+crond
pcntl:开启新进程
popen:调用外部程序

最终还是使用了popen开启新进程

转载于:https://blog.51cto.com/14043491/2343930

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值