注意事项
不要在代码中执行sleep以及其他睡眠函数,这样会导致整个进程阻塞
exit/die是危险的,会导致Worker进程退出
可通过register_shutdown_function来捕获致命错误,在进程异常退出时做一些清理工作
PHP代码中如果有异常抛出,必须在回调函数中进行try/catch捕获异常,否则会导致工作进程退出
不支持set_exception_handler,必须使用try/catch方式处理异常
异步编程
异步程序要求代码中不得包含任何同步阻塞操作
异步与同步代码不能混用,一旦应用程序使用了任何同步阻塞的代码,程序即退化为同步模式
类/函数重复定义
新手非常容易犯这个错误,由于Swoole/workerman是常驻内存的,所以加载类/函数定义的文件后不会释放。因此引入类/函数的php文件时必须要使用include_once或require_once,否会发生cannot redeclare function/class 的致命错误。
内存管理
PHP守护进程与普通Web程序的变量生命周期、内存管理方式完全不同。
进程隔离也是很多新手经常遇到的问题。修改了全局变量的值,为什么不生效,原因就是全局变量在不同的进程,内存空间是隔离的,所以无效