物聯(lián)網(wǎng)卡+盒子,服務器發(fā)起盒子投幣請求,但機臺幣數(shù)一直增加
config.php:
return [
// 注冊服務配置
'register' => [
// 注冊服務地址,用于gateway及business服務注冊 (必須)
'address' => '127.0.0.1:1256',
// 網(wǎng)關(guān)服務線程名稱,status方便查看
'name' => 'RegisterWorker',
// register服務秘鑰
'secretKey' => '',
],
// gateway服務配置
'gateway' => [
// gateway監(jiān)聽地址,用于客戶端連接 (必須)
'socket' => 'tcp://0.0.0.0:1220',
// 網(wǎng)關(guān)服務線程名稱,status方便查看
'name' => 'GatewayWorker',
// gateway進程數(shù)
'count' => 4,
// 本機ip,分布式部署時使用內(nèi)網(wǎng)ip,用于與business內(nèi)部通訊
'lanIp' => '127.0.0.1',
// 內(nèi)部通訊起始端口,每個 gateway 實例應該都不同,假如$gateway->count=4,起始端口為4000 則一般會使用4000 4001 4002 4003 4個端口作為內(nèi)部通訊端口
'startPort' => 2900,
// 是否可以平滑重啟,gateway 不能平滑重啟,否則會導致連接斷開
// 'reloadable' => false,
// 心跳時間間隔,設(shè)為0則表示不檢測心跳
'pingInterval' => 25,
// $gatewayPingNotResponseLimit * $gatewayPingInterval 時間內(nèi),客戶端未發(fā)送任何數(shù)據(jù),斷開客戶端連接 (設(shè)為0表示不監(jiān)聽客戶端返回數(shù)據(jù))
'pingNotResponseLimit' => 2,
// 服務端向客戶端發(fā)送的心跳數(shù)據(jù),為空不給客戶端發(fā)送心跳數(shù)據(jù)
'pingData' => hex2bin('0a241a0081150716152a2A0000000000000000000000008a0d0a'),
// gateway服務秘鑰
'secretKey' => '',
],
// business服務配置
'business' => [
// business服務名稱,status方便查看
'name' => 'BusinessWorker',
// business進程數(shù)
'count' => 4,
// 業(yè)務服務事件處理
'eventHandler' => 'app\worker\starter\Events',
// 業(yè)務超時時間,可用來定位程序卡在哪里
'processTimeout' => 30,
// 業(yè)務超時后的回調(diào),可用來記錄日志
'processTimeoutHandler' => '\\Workerman\\Worker::log',
// 業(yè)務服務秘鑰
'secretKey' => '',
// 是否允許多進程監(jiān)聽同一端口, php7才支持
'reusePort' => true,
],
];
start_gateway.php
// 檢查擴展是否加載
Utils::checkExtension();
$config = require __DIR__ . '/config.php';
$registerConfig = $config['register'];
$gatewayConfig = $config['gateway'];
// gateway 進程,使用配置的值
$gateway = new Gateway($gatewayConfig['socket']);
// 給注冊服務屬性賦值 (只賦值支持的屬性)
foreach (['name', 'count', 'lanIp', 'startPort', 'pingInterval', 'pingNotResponseLimit', 'pingData', 'secretKey'] as $key) {
isset($gatewayConfig[$key]) && $gateway->$key = $gatewayConfig[$key];
}
// 服務注冊地址
$gateway->registerAddress = $registerConfig['address'];
// 當客戶端連接上來時,設(shè)置連接的onWebSocketConnect,即在websocket握手時的回調(diào)
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $data)
{
// 可以在這里判斷連接來源是否合法,不合法就關(guān)掉連接
// $_SERVER['HTTP_ORIGIN']標識來自哪個站點的頁面發(fā)起的websocket鏈接
// if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
// {
// $connection->close();
// }
// onWebSocketConnect 里面$_GET $_SERVER是可用的
$connection->send(hex2bin('00'));
};
};
// 如果不是在根目錄啟動,則運行runAll方法
if(!defined('GLOBAL_START')) {
Worker::runAll();
}
發(fā)幣腳本:
盒子連接成功、偶爾斷開連接
發(fā)幣腳本執(zhí)行后機臺幣量一直增加不停
linunx gateway