物联网卡+盒子,服务器发起盒子投币请求,但机台币数一直增加
config.php:
return [
// 注册服务配置
'register' => [
// 注册服务地址,用于gateway及business服务注册 (必须)
'address' => '127.0.0.1:1256',
// 网关服务线程名称,status方便查看
'name' => 'RegisterWorker',
// register服务秘钥
'secretKey' => '',
],
// gateway服务配置
'gateway' => [
// gateway监听地址,用于客户端连接 (必须)
'socket' => 'tcp://0.0.0.0:1220',
// 网关服务线程名称,status方便查看
'name' => 'GatewayWorker',
// gateway进程数
'count' => 4,
// 本机ip,分布式部署时使用内网ip,用于与business内部通讯
'lanIp' => '127.0.0.1',
// 内部通讯起始端口,每个 gateway 实例应该都不同,假如$gateway->count=4,起始端口为4000 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
'startPort' => 2900,
// 是否可以平滑重启,gateway 不能平滑重启,否则会导致连接断开
// 'reloadable' => false,
// 心跳时间间隔,设为0则表示不检测心跳
'pingInterval' => 25,
// $gatewayPingNotResponseLimit * $gatewayPingInterval 时间内,客户端未发送任何数据,断开客户端连接 (设为0表示不监听客户端返回数据)
'pingNotResponseLimit' => 2,
// 服务端向客户端发送的心跳数据,为空不给客户端发送心跳数据
'pingData' => hex2bin('0a241a0081150716152a2A0000000000000000000000008a0d0a'),
// gateway服务秘钥
'secretKey' => '',
],
// business服务配置
'business' => [
// business服务名称,status方便查看
'name' => 'BusinessWorker',
// business进程数
'count' => 4,
// 业务服务事件处理
'eventHandler' => 'app\worker\starter\Events',
// 业务超时时间,可用来定位程序卡在哪里
'processTimeout' => 30,
// 业务超时后的回调,可用来记录日志
'processTimeoutHandler' => '\\Workerman\\Worker::log',
// 业务服务秘钥
'secretKey' => '',
// 是否允许多进程监听同一端口, 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'];
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $data)
{
// 可以在这里判断连接来源是否合法,不合法就关掉连接
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的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();
}
发币脚本:
盒子连接成功、偶尔断开连接
发币脚本执行后机台币量一直增加不停
linunx gateway
业务bug需要自己排查,别人没环境没代码的没办法猜到哪里有问题