# rpc-server **Repository Path**: qwsaeda/rpc-server ## Basic Information - **Project Name**: rpc-server - **Description**: 基于websocket长连接《中心集群》方案来做RPC通道,支持服务注册,底层协议支持json方案传输,简单,跨语言,定义rpc调用文本协议。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-04-30 - **Last Updated**: 2021-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # court 法院 #### 介绍 基于websocket长连接《中心集群》方案来做RPC通道 - 支持服务注册(每一个连接就是一个服务) - 底层协议支持json方案传输,简单,跨语言 - 根据websocket连接加鉴权即可连接到相关服务,一般都跑在内网中,故服务间互信,鉴权可以不启用。 - 定义rpc调用文本协议。 - 根据以上定义,可以实现跨语言服务调用。 - 消息通道,邮局,点对点 - 服务注册中心,消息中心 ### 流程 server<--->消息<-->中心<--->消息<--->server 接收消息中心:判断消息是给转发给投递中心,还是丢弃掉 中间用无锁队列解耦 投递中心:负责消息的投递 有一个session管理器,通过消息的策略(负载均衡)找出消息投递者 转发中心:负责集群消息的转发 #### 软件架构 集群不分主从,实现转发即可,A-->B-->C,消息闭环即可,每一次转发把服务ID带个,避免消息风暴 线程固定,事件线程,中间不阻塞任何操作, 所有消息直接扔投递池(大小可以调整,默认为1024*1024)中,,错误池。 投递服务单线程,直接从投递池中获取消息,投递不出去,即扔到错误池,错误处理器,处理过直接再扔到投递池中。 负载均衡 - 服务的定义,版本,扩展 - 对多个服务的负载策略,准备使用DSL描述方案来定义,默认方案是轮询,权重,随机 - 对服务版本的负载 client连接到,发现是调用, - 命名空间/命名空间/方法名, - 参数列表 - 参数验证协议,client端自己实现 - 返回参数是一个对象 - 状态 - 错误 - 参数 - 协议无关具体实现,只是按这个json字符串传递,不验证参数 #### rpc调用协议定义 1. request { requestId:"152dfs4ew32c324e342cd", serverId:"每个登录ID由服务分配的ID" to:"/orderService", path:"/hello/demo", method:"test" params:"{\"name\":\"test\"}" auth:"zxj;男;dfasewewq3421ds23q;role:[管理员,平台管理员]", ver:v1, balance:v2,default,不支持协议时,就按默认协议 headers:{}, exts:{"扩展字段"}, } 2. response { requestId:"152dfs4ew32c324e342cd", serverId:"每个登录ID由服务分配的ID,服务连接时分配的,如果" headers:{} } 3. 扩展消息体机制 4. rpc-server原则上就是个最高效率通道,因为不是MQ,而是通道,收到消息后就要转发出去,转发不出去的,回复错误即可 - WEB管理页面,先不实现 - 登录授权方案,目前是url直接带过来 - 自己可以实现,像openfire一样,基于消息验证的方案[通过加密消息体方案来验证,不准备实现,这个服务主要是内部服务之间信任通信的,而且只是转发通道] #### 集群[暂不实现] 1. 如何连接集群 2. 集群中的授权 3. 消息如何传递 3.1 从其它集群传递过来的消息,判断是否是自己发出的 3.2 如果是自己集群的消息就直接投递出去,不是,加上次数,如果判断次数超过{7}次,就扔掉 #### 机制说明 1. 收到消息后,解析后,扔给控制处理中心,控制处理中心根据调用规则,转发到相关服务 2. xxxx 3. xxxx ### 服务管理 1. 增加一个管理后台,可以列出所有服务 2. 列出负载均衡策略 3. 可以配置服务与负载均衡 ### 负载均衡策略 1. 轮询,先验证版本 2. 随机,先验证版本 3. 标签 4. 权重 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 用固定大小队列来控制程序高交发时的内存