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