创建自定义服务

除了模块自带的 HTTPWebSocket 服务,您还可以创建自定义服务(模块开发者亦可创建模块专用服务),创建步骤如下:

  1. 检查 config/worker_*.php 配置文件,确定已有服务不能满足需求
  2. 通读 WorkermanGatewayWorker 文档,不然你大概率不知道你在干什么
  3. 确定您的自定义服务需要启动那些进程,比如内置的 ws 服务启动了 BusinessWorker、Register、Gateway 三种进程,您可以参考 GatewayWorker 的工作原理文档,确定一个服务标识,ws、http 已被占用,下文使用 custom 代替。
  4. modules/workerman/servers/ 目录内,新建 custom 文件夹,其中为每种进程建立一个进程启动文件,一定要先参考已有的 wshttp 目录中的文件,或直接复制后修改,在进程启动文件中引入了对应的配置文件,是否为您的自定义服务建立配置文件请随意,在这些配置中,具有 eventHandler(回调类命名空间) 等配置项,很关键。
  5. 若您的服务需要在 Windows 下也可以启动以便调试,请于 modules/workerman/commands/worker_start_for_win/ 目录内,建立新的 custom 文件夹,和上一步类似,一个进程一个启动文件,win下不支持多进程,只能建立多个文件然后同时执行,继续创建 custom_worker_start_for_win.bat 文件,其中内容参考已有的 bat 文件即可。
  6. 您在第4步已经配置好了回调类命名空间,此时继续建立对应的回调类,当前已有的回调类是:app/worker/events/Http.php、app/worker/events/WsBusiness.php,其中注册了 onWorkerStart、onMessage 等方法。
  7. 在回调类中,还实例化了 app/worker/library/WorkerHttpApp.php 或者 app/worker/library/WorkerWsApp.php,是否需要为您的应用自定义 App,请结合实际需求决定。
  8. 整个新建服务的过程并不复杂,您会发现其实整个 workerman 模块文件都很少,建立新服务时请多映照已有服务和 workerman 官方文档即可。
  9. 对于模块开发者而言,以上文件全部按结构打包至模块包内即可(不要打包 workerman 模块本身,只打包新建服务相关文件,BuildAdmin 市场会提醒用户先安装 workerman 模块,然后再安装您的模块时,系统将新的服务文件覆盖到对应目录,自然就能使用了)。