网关(Gatesvr) 设计(1)
Gate解决的问题:
1、用户在服务端的实例可以在不同的进程中,也可以移动到同一个进程中。
2、用户只需要与服务端建立有限条连接,即可以访问到任意服务进程。这个连接的数量不会随服务进程的数量增长而线性增长。
要点:
1、作为服务listen两个端口:clients连接,backend连接;
2、能够将clients的消息转发到对应的backend。backend可以向Gate订阅自己关注的消息;
3、能够支持组播的需求,针对场景服务;
4、Gate有自己的协议,以支持以上需求;
Gate两个组件:
1、针对路由client消息的需求,这个组件叫Broker。
2、针对组播backend消息的需求,这个组件叫Multicast。
简要数据结构:
1、FrontendHandlerManager:
map<uid, Handler>
2、BackendHandlerManager:
map<key, set<Handler>>
3、Proxy:
map<key, map<uid, Handler>>
4、Multicast:
map<forwardid, set<uid>> //forwardid->uid
5、FrontendHandler:
a、handshake:
FrontendHandlerManager::Insert(uid, handler);
b、send:map3查已有backendhandler则发送,没有则从map2中选择一个
handler = Proxy::FindHandler(key, uid);
if (handler == NULL)
{
handler = BackendHandlerManager::GetHandler();
if (handler == NULL) return;
}
handler->SendMsg();
6、BackendHandler:
a、subscribe: insert map2
BackendHandlerManager::Insert(key, handler);
b、unicast: 查map1有则发
handler = FrontendHandlerManager::FindHandler(uid);
if (handler == NULL) return;
handler->SendMsg();
c、addforwards:insert map4
Multicast::Insert(forward, uid);
d、removeforwards: remove map4
Multicast::Remove(forward, uid);
e、multicast: 查map4,有则发
Multicast::Get(forward, uids);
for (uid in uids)
{
handler = FrontendHandlerManager::FindHandler(uid);
if (handler == NULL) continue;
handler->SendMsg();
}
网关(Gatesvr) 设计(1)的更多相关文章
- API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过
API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakashuo/new/dakalive/detail/1407
- 一个简单可参考的API网关架构设计
网关一词较早出现在网络设备里面,比如两个相互独立的局域网段之间通过路由器或者桥接设备进行通信, 这中间的路由或者桥接设备我们称之为网关. 相应的 API 网关将各系统对外暴露的服务聚合起来,所有要调用 ...
- 网关never_host设计
never下app的host与api Never是纯c#语言开发的一个框架.host则是使用该框架开发出来的API网关,它包括了:路由.认证.鉴权.熔断,内置了负载均衡器Deployment:并且只需 ...
- 基于CC2530的ZigBee转以太网网关的设计与实现
*已刊登至:<无线电>8月刊 物联网技术的实现中,无线技术是必不可少的部分. 近年无线技术的发展,将ZigBee推入人们的视线中.那么ZigBee是如何的一种技术呢?带着疑问.我查询了它的 ...
- 唯品会API网关设计与实践--转
原文地址:https://609518.kuaizhan.com/86/70/p4108366952248f 刘璟宇Leo 唯品会资深研发工程师,在大型高性能分布式系统设计和开发方面有丰富的经验.目前 ...
- 如何设计一个亿级网关(API Gateway)?
1.背景 1.1 什么是API网关 API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等. 1.2 为什么需要API网关 RPC协 ...
- 基于ZigBee的家居控制系统的设计与应用
基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘 要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通 ...
- 理解WEB API网关
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Net分布式系统之六:微服务之API网关
本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件“API网关”. 一.引言 ...
随机推荐
- vue初学实践之路——vue简单日历组件(1)
---恢复内容开始--- 最近做的项目有一个需求,需要有一个日历组件供预定功能使用,之前的代码过于繁琐复杂,所以我采用vue重写了这个组件. npm.vue等等安装. 只是一个简单的日历组件,所以并不 ...
- GithubPages + Hexo + Disqus博客教程
文章主要描述了利用github page,hexo静态博客框架以及disqus来搭建个人静态博客的详细步骤. github page用来搭建博客的主页,hexo用来更改博客主题.发布文章等等,并通过配 ...
- ffmpeg参数说明
ffmpeg.exe -i F:\慶哥\慶哥之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv ...
- fpm 制作 rpm 包
支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...
- NLTK学习笔记(八):文法--词关系研究的工具
[TOC] 对于一门语言来说,一句话有无限可能.问题是我们只能通过有限的程序来分析结构和含义.尝试将"语言"理解为:仅仅是所有合乎文法的句子的大集合.在这个思路的基础上,类似于 w ...
- php中引用&的一个小实例
在百度知道上碰到一段关于php的引用符&的代码,对于初学都来说还是很考验理解分析能力的,把代码和自己的分析贴上来作一个备份,也与大家共勉. 代码片段: $arr =array(1,2,3,4) ...
- Hibernate的使用
1 创建一个Java项目,在项目中新建一个lib,将需要的Hibernate包和MySQL包导入,并Build Path 2 在src下添加Hibernate.cfg.xml在此文件中对Hiberna ...
- BigDecimal四舍五入使用总结
//BigDecimal四舍五入double f1 = new BigDecimal(1).setScale(2,RoundingMode.HALF_UP).doubleValue();//转化成字符 ...
- jquery 表格行计算
表格行计算 总金额: function jisuanTrJinE(obj){ var curTab = $(obj).closest("table"); var curTr = $ ...
- Cordova(PhoneGap) 环境搭建与基础
Cordova(PhoneGap) 创建步骤:官方Guide 环境准备 安装 Node.js nodejs.org 安装 git git-scm.com (bin目录添加到path) 安装 cordo ...