在事件onstart/onworkstart之前定义的全局变量是共享的,之后的事件因为多进程的原因并不保证可共享。
但不一定共享全局变量就好,比如mysql或redis就不适合共用一个连接。
websocket的全局变量共享
socket的事件是共享的,但onRequest事件不共享。
是否可以共用1个redis或mysql连接
绝对不可以。必须每个进程单独创建Redis
、MySQL
、PDO
连接,其他的存储客户端同样也是如此。原因是如果共用1个连接,那么返回的结果无法保证被哪个进程处理。持有连接的进程理论上都可以对这个连接进行读写,这样数据就发生错乱了。
所以在多个进程之间,一定不能共用连接
- 在
swoole_server
中,应当在onWorkerStart
中创建连接对象 - 在
swoole_process
中,应当在swoole_process->start
后,子进程的回调函数中创建连接对象 - 本页面所述信息对使用
pcntl_fork
的程序同样有效