GatewayWorker 版本升級過程和注意點

公司開發用到WorkerMan框架,開發RPC服務,用於拉取用戶信息和協助用戶註冊。php

workman 官網:http://www.workerman.net/workermanhtml

 

老版本:app

workerman : 3.1.7
GatewayWorker : 1.0.x

查看GatewayWorker版本:http://www.workerman.net/gatewaydoc/faq/get-gateway-version.html

 

近來,錯誤日誌 workerman.log 中頻繁報錯:框架

2016-08-22 14:48:24 createGlobalClientId fail GatewayWorker\Lib\StoreDriver\Redis :
2016-08-22 14:48:24 storeClientAddress fail.
2016-08-22 14:48:25 createGlobalClientId fail GatewayWorker\Lib\StoreDriver\Redis :
2016-08-22 14:48:25 storeClientAddress fail.

 

根據workerman 框架開發者李亮 的說法,更新GatewayWorker 版本能解決這問題。ui

 

老版本文件的目錄結構:this

service/spa

├── Applications (目錄)
│   └── CHWRPC(目錄)
│     ├── Event.php
│     ├── start_businessworker.php
│     └── start_gateway.php
├── GatewayWorker (目錄)
├── start.php
├── Workerman (目錄)
└── workerman.log.net

 

更新GatewayWorker 版本:debug

升級前準備:調試

一、備份整個service 目錄文件

二、查看官方文檔,升級的提醒:http://www.workerman.net/gatewaydoc/appendices/upgrade.html

三、下載並解壓源碼包:

  1)下載頁面:http://www.workerman.net/download,下載 GatewayWorker 的 zip壓縮文件

  2)解壓:unzip GatewayWorker-master.zip

  3)源碼包文件的基本目錄結構以下:

  GatewayWorker-master/

  ├── Applications (目錄)
  │   └── YourApp (目錄)
  │      ├── Events.php
  │      ├── start_businessworker.php
  │      ├── start_gateway.php
  │      └── start_register.php
  ├── GatewayWorker (目錄)
  ├── start.php
  ├── Workerman (目錄)
  └── workerman.log

 

升級步驟:

一、中止服務: php start.php stop

二、須要同時將GatewayWorker 和 Workerman 版本更新,否則會報錯。將GatewayWorker-master目錄中的GatewayWorker 和 Workerman 目錄文件,覆蓋到 service 目錄中

三、

修改文件名,將service/Applications/CHWRPC/Event.php 更名爲 Events.php

修改類名, 修改 Events.php 中 class Event 爲 class Events

四、拷貝GatewayWorker-master/Applications/YourApp/start_register.php 到 service/Applications/CHWRPC/ 中

<?php 
/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \GatewayWorker\Register;

// 自動加載類
require_once __DIR__ . '/../../Workerman/Autoloader.php';

// register 服務必須是text協議
$register = new Register('text://0.0.0.0:1236');

// 若是不是在根目錄啓動,則運行runAll方法
if(!defined('GLOBAL_START')) {
    Worker::runAll();
}

五、新增一行內容到service/Applications/CHWRPC/start_gateway.php

# echo "$gateway->registerAddress = '127.0.0.1:1236';" >> start_gateway.php
## 服務註冊地址
## 單機部署ip爲127.0.0.1
## 端口與start_register.php中監聽端口一致

六、新增一行內容到service/Applications/CHWRPC/start_businessworker.php 

# echo "$worker->registerAddress = '127.0.0.1:1236';" >> start_businessworker.php 
注意:端口要和start_register.php中監聽端口一致。

七、若是業務有依賴client_id類型,須要將client_id由原來整型改成字符串

八、重啓服務,進入debug模式:php start.php start 

九、若是沒有報錯,則將服務放到後臺運行:php start.php start -d

 

新版本:

workerman : 3.3.4
GatewayWorker : 2.0.7

 

調試模式下,遇到的幾個問題:

一、

警告信息:

Deprecated: Lib\MongoDB::_connect(): The Mongo class is deprecated, please use the MongoClient class in /home/service/Applications/CHWRpc/Lib/MongoDB.php on line 1859

分析:

MongoDB.php的第1859行:

$this->_connection = new \Mongo($this->_connection_string, $options);

_connect() 方法裏初始化鏈接時,用到的 Mongo 類已經被廢棄了,建議使用 MongoClient 類。

解決:

將_connection() 方法中用到的 Mongo 類改成 MongoClient 類,即:

$this->_connection = new \MongoClient($this->_connection_string, $options);

 

二、

警告信息:

Strict Standards: Non-static method Modules\NickName::boy_1() should not be called statically in /home/service/Applications/CHWRpc/Modules/NickName.php on line 33

分析:

boy_1() 的聲明是一個普通方法,而調用時卻採用靜態方法調用,所以出現警告信息。

解決方法:

boy_1() 方法的聲明修改成: static function boy_1(){ ... }

相關文章
相關標籤/搜索