From e5c7ac8b7739447f3de3fb1e1bb970187112938d Mon Sep 17 00:00:00 2001 From: sa0ChunLuyu Date: Fri, 21 Oct 2022 23:12:29 +0800 Subject: [PATCH] no message --- .gitignore | 5 ++ Applications/YourApp/Events.php | 64 ++++++++++++++++++ Applications/YourApp/start_businessworker.php | 38 +++++++++++ Applications/YourApp/start_gateway.php | 67 +++++++++++++++++++ Applications/YourApp/start_register.php | 29 ++++++++ MIT-LICENSE.txt | 21 ++++++ README.md | 35 ++++++++++ composer.json | 15 +++++ config.php | 7 ++ start.php | 37 ++++++++++ 10 files changed, 318 insertions(+) create mode 100644 .gitignore create mode 100644 Applications/YourApp/Events.php create mode 100644 Applications/YourApp/start_businessworker.php create mode 100644 Applications/YourApp/start_gateway.php create mode 100644 Applications/YourApp/start_register.php create mode 100644 MIT-LICENSE.txt create mode 100644 README.md create mode 100644 composer.json create mode 100644 config.php create mode 100644 start.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1ec1a85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/vendor +composer.lock +/.idea +/.vscode + diff --git a/Applications/YourApp/Events.php b/Applications/YourApp/Events.php new file mode 100644 index 0000000..d6e2696 --- /dev/null +++ b/Applications/YourApp/Events.php @@ -0,0 +1,64 @@ + + * @copyright walkor + * @link http://www.workerman.net/ + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +/** + * 用于检测业务代码死循环或者长时间阻塞等问题 + * 如果发现业务卡死,可以将下面declare打开(去掉//注释),并执行php start.php reload + * 然后观察一段时间workerman.log看是否有process_timeout异常 + */ + +//declare(ticks=1); + +use \GatewayWorker\Lib\Gateway; + +/** + * 主逻辑 + * 主要是处理 onConnect onMessage onClose 三个方法 + * onConnect 和 onClose 如果不需要可以不用实现并删除 + */ +class Events +{ + /** + * 当客户端连接时触发 + * 如果业务不需此回调可以删除onConnect + * + * @param int $client_id 连接id + */ + public static function onConnect($client_id) + { + Gateway::sendToClient($client_id, json_encode([ + 'action' => 'init', + 'client_id' => $client_id + ], JSON_UNESCAPED_UNICODE)); + } + + /** + * 当客户端发来消息时触发 + * @param int $client_id 连接id + * @param mixed $message 具体消息 + */ + public static function onMessage($client_id, $message) + { + + } + + /** + * 当用户断开连接时触发 + * @param int $client_id 连接id + */ + public static function onClose($client_id) + { + + } +} diff --git a/Applications/YourApp/start_businessworker.php b/Applications/YourApp/start_businessworker.php new file mode 100644 index 0000000..fdd7ca1 --- /dev/null +++ b/Applications/YourApp/start_businessworker.php @@ -0,0 +1,38 @@ + + * @copyright walkor + * @link http://www.workerman.net/ + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +use \Workerman\Worker; +use \Workerman\WebServer; +use \GatewayWorker\Gateway; +use \GatewayWorker\BusinessWorker; +use \Workerman\Autoloader; + +// 自动加载类 +require_once __DIR__ . '/../../vendor/autoload.php'; +require_once __DIR__ . '/../../config.php'; +global $config; +// bussinessWorker 进程 +$worker = new BusinessWorker(); +// worker名称 +$worker->name = 'YourAppBusinessWorker'; +// bussinessWorker进程数量 +$worker->count = 1; +// 服务注册地址 +$worker->registerAddress = '127.0.0.1:' . $config['register']; + +// 如果不是在根目录启动,则运行runAll方法 +if (!defined('GLOBAL_START')) { + Worker::runAll(); +} + diff --git a/Applications/YourApp/start_gateway.php b/Applications/YourApp/start_gateway.php new file mode 100644 index 0000000..c1c0306 --- /dev/null +++ b/Applications/YourApp/start_gateway.php @@ -0,0 +1,67 @@ + + * @copyright walkor + * @link http://www.workerman.net/ + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +use \Workerman\Worker; +use \Workerman\WebServer; +use \GatewayWorker\Gateway; +use \GatewayWorker\BusinessWorker; +use \Workerman\Autoloader; + +// 自动加载类 +require_once __DIR__ . '/../../vendor/autoload.php'; +require_once __DIR__ . '/../../config.php'; +global $config; +// gateway 进程,这里使用Text协议,可以用telnet测试 +$url = 'websocket://0.0.0.0:' . $config['port']; +$gateway = new Gateway($url); +// gateway名称,status方便查看 +$gateway->name = $config['name']; +// gateway进程数 +$gateway->count = 1; +// 本机ip,分布式部署时使用内网ip +$gateway->lanIp = '127.0.0.1'; +// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000 +// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 +$gateway->startPort = $config['start']; +// 服务注册地址 +$gateway->registerAddress = '127.0.0.1:' . $config['register']; + +// 心跳间隔 +//$gateway->pingInterval = 10; +// 心跳数据 +$gateway->pingData = '{"action":"ping"}'; + +/* +// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调 +$gateway->onConnect = function($connection) +{ + $connection->onWebSocketConnect = function($connection , $http_header) + { + // 可以在这里判断连接来源是否合法,不合法就关掉连接 + // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接 + if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net') + { + $connection->close(); + } + // onWebSocketConnect 里面$_GET $_SERVER是可用的 + // var_dump($_GET, $_SERVER); + }; +}; +*/ + +// 如果不是在根目录启动,则运行runAll方法 +if (!defined('GLOBAL_START')) { + Worker::runAll(); +} + diff --git a/Applications/YourApp/start_register.php b/Applications/YourApp/start_register.php new file mode 100644 index 0000000..90b7db5 --- /dev/null +++ b/Applications/YourApp/start_register.php @@ -0,0 +1,29 @@ + + * @copyright walkor + * @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__ . '/../../vendor/autoload.php'; +require_once __DIR__ . '/../../config.php'; +global $config; +// register 必须是text协议 +$register = new Register('text://0.0.0.0:' . $config['register']); + +// 如果不是在根目录启动,则运行runAll方法 +if (!defined('GLOBAL_START')) { + Worker::runAll(); +} + diff --git a/MIT-LICENSE.txt b/MIT-LICENSE.txt new file mode 100644 index 0000000..fd6b1c8 --- /dev/null +++ b/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2009-2015 walkor and contributors (see https://github.com/walkor/workerman/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d78cfc3 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +GatewayClient +================= +`composer require workerman/gatewayclient` + +```php +use GatewayClient\Gateway; + +Gateway::$registerAddress = '127.0.0.1:3238'; + +Gateway::bindUid($client_id, $uid); +Gateway::joinGroup($client_id, $group_id); + +Gateway::sendToUid($uid, $message); +Gateway::sendToGroup($group, $message); + +Gateway::sendToAll($data); +Gateway::sendToClient($client_id, $data); +Gateway::closeClient($client_id); +Gateway::isOnline($client_id); +Gateway::bindUid($client_id, $uid); +Gateway::isUidOnline($uid); +Gateway::getClientIdByUid($uid); +Gateway::unbindUid($client_id, $uid); +Gateway::sendToUid($uid, $data); +Gateway::joinGroup($client_id, $group); +Gateway::sendToGroup($group, $data); +Gateway::leaveGroup($client_id, $group); +Gateway::getClientCountByGroup($group); +Gateway::getClientSessionsByGroup($group); +Gateway::getAllClientCount(); +Gateway::getAllClientSessions(); +Gateway::setSession($client_id, $session); +Gateway::updateSession($client_id, $session); +Gateway::getSession($client_id); +``` \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4e90c94 --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "name" : "workerman/gateway-worker-demo", + "keywords": ["distributed","communication"], + "homepage": "http://www.workerman.net", + "license" : "MIT", + "require": { + "workerman/gateway-worker" : ">=3.0.0" + }, + "autoload": { + "psr-4": { + "" : "./", + "" : "./Applications/YourApp/" + } + } +} diff --git a/config.php b/config.php new file mode 100644 index 0000000..b93da68 --- /dev/null +++ b/config.php @@ -0,0 +1,7 @@ + '鹿和开发套件', // 服务名称 + 'port' => 3282, // 服务端口 + 'register' => 3238, // 服务注册端口 + 'start' => 3900, // 内部通讯起始端口 +]; \ No newline at end of file diff --git a/start.php b/start.php new file mode 100644 index 0000000..410c580 --- /dev/null +++ b/start.php @@ -0,0 +1,37 @@ +