开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
开源项目 > WEB应用开发 > RPC开发框架 &&
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
22 Star 46 Fork 13

thinkpc/Dora-RPC

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (5)
标签 (6)
master
platform-version
dora-console
hotfix-server-discovery
pr/1
0.4.15_beta
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (5)
标签 (6)
master
platform-version
dora-console
hotfix-server-discovery
pr/1
0.4.15_beta
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (5)
标签 (6)
master
platform-version
dora-console
hotfix-server-discovery
pr/1
0.4.15_beta
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
Dora-RPC
/
src
/
Monitor.php
Dora-RPC
/
src
/
Monitor.php
Monitor.php 6.22 KB
一键复制 编辑 原始数据 按行查看 历史
kaleesi 提交于 2016年07月26日 12:36 +08:00 . 增加 monitor process name ip
<?php
namespace DoraRPC;
class Monitor
{
protected $_server = null;
protected $_ip = "0.0.0.0";
protected $_port = 9569;
protected $_config;
//server report
final public function discovery(array $config)
{
$self = $this;
$this->_server->addProcess(new \swoole_process(function () use ($config, $self) {
swoole_set_process_name("dora: monitor service");
static $_redisObj = array();
while (true) {
//for result list
$serverListResult = array();
//get redis config
$redisConfig = $self->_config["redis"];
//connect all redis
foreach ($redisConfig as $redisItem) {
//validate redis ip and port
if (trim($redisItem["ip"]) && $redisItem["port"] > 0) {
$key = $redisItem["ip"] . "_" . $redisItem["port"];
try {
//connecte redis
if (!isset($_redisObj[$key])) {
//if not connect
$_redisObj[$key] = new \Redis();
$_redisObj[$key]->connect($redisItem["ip"], $redisItem["port"]);
}
//get register node server
$serverList = $_redisObj[$key]->smembers("dora.serverlist");
if ($serverList) {
foreach ($serverList as $sitem) {
$info = json_decode($sitem, true);
//decode success
if ($info) {
//get last report time
$lastTimeKey = "dora.servertime." . $info["node"]["ip"] . "." . $info["node"]["port"] . ".time";
$lastUpdatTime = $_redisObj[$key]->get($lastTimeKey);
//timeout ignore
if (time() - $lastUpdatTime > 20) {
continue;
}
if (is_array($info["group"])) {
foreach ($info["group"] as $groupname) {
$clientkey = $info["node"]["ip"] . "_" . $info["node"]["port"];
$serverListResult[$groupname][$clientkey] = array("ip" => $info["node"]["ip"], "port" => $info["node"]["port"]);
$serverListResult[$groupname][$clientkey]["updatetime"] = $lastUpdatTime;
}
}
//foreach group and record this info
}//decode info if
}// foreach
}//if got server list from redis
} catch (\Exception $ex) {
//var_dump($ex);
$_redisObj[$key] = null;
echo "get redis server error" . PHP_EOL;
}
}
}
if (count($serverListResult) > 0) {
$configString = var_export($serverListResult, true);
$ret = file_put_contents($this->_config["export_path"], "<?php" . PHP_EOL . "//This is generaled by client monitor" . PHP_EOL . "return " . $configString . ";");
if (!$ret) {
echo "Error save the config to file..." . PHP_EOL;
} else {
echo "General config file to:" . $this->_config["export_path"] . PHP_EOL;
}
} else {
echo "Error there is no Config get..." . PHP_EOL;
}
//sleep 10 sec
sleep(10);
}
}));
}
public function __construct($ip = "0.0.0.0", $port = 9569, $config = array())
{
//record ip:port
$this->_ip = $ip;
$this->_port = $port;
//create server object
$this->_server = new \swoole_server($ip, $port, \SWOOLE_PROCESS, \SWOOLE_SOCK_UDP);
//set config
$this->_server->set(array(
'open_length_check' => 1,
'dispatch_mode' => 3,
'package_length_type' => 'N',
'package_length_offset' => 0,
'package_body_offset' => 4,
'package_max_length' => 1024 * 1024 * 2,
'buffer_output_size' => 1024 * 1024 * 3,
'pipe_buffer_size' => 1024 * 1024 * 32,
'open_tcp_nodelay' => 1,
'heartbeat_check_interval' => 5,
'heartbeat_idle_time' => 10,
'reactor_num' => 1,
'worker_num' => 2,
'task_worker_num' => 0,
'max_request' => 0, //必须设置为0否则并发任务容易丢,don't change this number
'task_max_request' => 4000,
'backlog' => 2000,
'log_file' => '/tmp/sw_monitor.log',
'task_tmpdir' => '/tmp/swmonitor/',
'daemonize' => 0,//product env is 1
));
//register the event
$this->_server->on('Packet', array($this, 'onPacket'));
echo "Start Init Server udp://" . $ip . ":" . $port . PHP_EOL;
//store the list of redis
$this->_config["redis"] = $config["discovery"];
//store the avaliable node list to this config file
$this->_config["export_path"] = $config["config"];
//log monitor path
$this->_config["log_path"] = $config["log"];
$this->discovery($this->_config["redis"]);
}
public function start()
{
$this->_server->start();
}
public function onPacket(\swoole_server $server, $data, $client_info)
{
//$data = \DoraDRPC\Base\Packet::packDecode($data);
//$server->sendto($client_info['address'], $client_info['port'], \DoraDRPC\Base\Packet::packEncode(array()));
//var_dump($server, $data);
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Dora RPC 是一款基于Swoole定长包头通讯协议的最精简的RPC, 用于复杂项目前后端分离,分离后项目都通过API工作可更好的跟踪、升级、维护及管理。
取消

发行版

暂无发行版

开源评估指数源自 OSS-Compass 评估体系,评估体系围绕以下三个维度对项目展开评估:

1. 开源生态

  • 生产力:来评估开源项目输出软件制品和开源价值的能力。
  • 创新力:用于评估开源软件及其生态系统的多样化程度。
  • 稳健性:用于评估开源项目面对多变的发展环境,抵御内外干扰并自我恢复的能力。

2. 协作、人、软件

  • 协作:代表了开源开发行为中协作的程度和深度。
  • 人:观察开源项目核心人员在开源项目中的影响力,并通过第三方视角考察用户和开发者对开源项目的评价。
  • 软件:从开源项目对外输出的制品评估其价值最终落脚点。也是开源评估最"古老"的主流方向之一"开源软件" 的具体表现。

3. 评估模型

    基于"开源生态"与"协作、人、软件"的维度,找到与该目标直接或间接相关的可量化指标,对开源项目健康与生态进行量化评估,最终形成开源评估指数。

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/thinkpc/Dora-RPC.git
git@gitee.com:thinkpc/Dora-RPC.git
thinkpc
Dora-RPC
Dora-RPC
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /