细心,谨慎!只有坚持不懈的努力,才有成功的荣誉!

swoole遇到坑(备忘)

1,子进程可以共享主进程的常量,全局变量,静态变量,函数,类继承,类方法,类属性,但是相对于主进程来说,这些是只读的,即在子进程中修改变量和类属性只会在子进程中生效,值的改变不会映射到主进程和其他子进程!!

2,子进程的共享规律,意味着子进程可以共享主进程的数据库连接变量,但不要这么做!!,较多的子进程对一个数据库连接并发请求,mysql会拒绝请求,redis会在临界点出现意外结果,超出临界点会拒绝请求。swoole官方有提供mysql和redis的Coroutine拓展,能解决这个问题,但是谨慎使用,当数据库都变得不可靠时,你的程序稳定性就无从可谈了,尤其是生产环境,稳定的解决办法就是每个子进程都建立自己的数据库连接。
总结经验:
A,短链接请注意每次请求结束后close掉mysql or redis连接。
B,长连接注意需要检查连接是否断开,断开要有重连机制。

3,避免在守护进程使用sleep()或usleep()

4,静态变量reload有时候无法释放  要在夜深人静的时候restart
官方文档解释:
平滑重启只对onWorkerStart或onReceive等在Worker进程中include/require的PHP文件有效,Server启动前就已经include/require的PHP文件,不能通过平滑重启重新加载
对于Server的配置即$serv->set()中传入的参数设置,必须关闭/重启整个Server才可以重新加载
Server可以监听一个内网端口,然后可以接收远程的控制命令,去重启所有Worker进程
  1. cialis price说道:

    Viagra Canada Price orgaptep https://bbuycialisss.com/# - Cialis Hacracrida Misoprostol Generique Acheter usafunsaft generic cialis no prescription VekFoews results of cialis and viagra

  2. mogoscise说道:

    Cialis 20mg Euro https://cialibuy.com/ - Cialis Buy Accutane Canadian Pharmacy Online brand cialis online Cialis 10 Mg Erfahrung

发表评论

电子邮件地址不会被公开。 必填项已用*标注