开发前必读

使用WebWorker开发http应用,你需要了解以下内容:

一、WebWorker开发与普通PHP开发的不同之处

除了与HTTP协议相关的变量函数无法直接使用外,WebWorker开发与普通PHP开发并没有很大不同。

1、应用层协议不同

  • 普通PHP开发一般是基于fpm或mod_php来做的,http协议是由nginx或apache来处理的
  • WebWorker已经内置了HTTP协议,并不需要nginx或apache类似的http服务器

2、请求周期差异

  • 普通PHP在Web应用中一次请求过后会释放所有的变量与资源
  • WebWorker开发的应用程序在第一次载入解析后便常驻内存,使得类的定义、全局对象、类的静态成员不会释放,便于后续重复利用

3、注意避免类和常量的重复定义

  • 由于WebWorker会缓存编译后的PHP文件,所以要避免多次require/include相同的类或者常量的定义文件。建议使用require_once/include_once加载文件。

4、注意单例模式的链接资源的释放

  • 由于WebWorker不会在每次请求后释放全局对象及类的静态成员,在数据库等单例模式中,往往会将数据库实例(内部包含了一个数据库socket链接)保存在数据库静态成员中,使得WebWorker在进程生命周期内都复用这个数据库socket链接。需要注意的是当数据库服务器发现某个链接在一定时间内没有活动后可能会主动关闭socket链接,这时再次使用这个数据库实例时会报错,(错误信息类似mysql gone away)。Webworker提供了数据库类,有断开重连的功能,开发者可以直接使用。

5、注意不要使用exit、die语句

  • WebWorker运行在PHP命令行模式下,当调用exit、die退出语句时,会导致当前进程退出。虽然子进程退出后会立刻重新创建一个的相同的子进程继续服务,但是还是会对业务产生影响。

results matching ""

    No results matching ""