RPC
staysilent
这个作者很懒,什么都没留下…
展开
-
ps:Netty服务端主动关闭问题
之前主动关闭nettyserver是在serverhandler中通过ctx.channel().parent().close();直接关闭serversocketchannel,触发关闭事件,使得sync()不在阻塞线程。另外的方法就是设置一个静态的关闭服务器方法,在外部调用。方法的具体代码之前也有提及,这篇主要是进行测试。主要是服务端测试:public class TestServer { Remote_game_interface Tx_net = new Player_info_fin原创 2021-01-06 16:41:57 · 2762 阅读 · 0 评论 -
6. 服务自动注销、负载均衡、服务端主动关闭
本次优化主要有两部分,服务自动注销以及负载均衡策略。之前demo可以实现服务的本地注册和Nacos远程服务注册。但是如果服务端断开,nacos注册中心中仍然存在未注销的服务信息,客户端继续调用该服务端提供的服务就会调用失败。因此需要在服务提供端关闭时自动向Nacos中心注册,这样要么在Nacos中找不到对应服务名,要么找得到服务名但是是其他服务端提供,仍然可以调用成功。多次请求高并发的时候如果同时访问一个服务端会影响性能,因此负载均衡策略就是客户端在请求服务时通过合适的策略来选择不同的服务端。基础逻辑原创 2020-12-27 16:41:57 · 1090 阅读 · 1 评论 -
ps:nacos单机模式启动命令问题
之前启动Nacos单机模式是用的sh startup.sh -m standalone很奇怪,第一次在cmd窗口可以,再次打开显示:‘sh’ 不是内部或外部命令,也不是可运行的程序或批处理文件。一开始以为是环境变量的原因,后来发现使用其他命令可以,应该是sh是linux下的文件,cmd窗口不识别sh指令,因此单机模式启动改为在Nacos的bin目录下:startup.cmd -m standaloneps:windows下启动sh文件方法...原创 2020-12-24 21:25:17 · 8444 阅读 · 0 评论 -
5. 使用Nacos远程服务注册优化
之前demo中客户端只能和一个服务端通信,实现的是一个服务端提供多个本地任务,客户端进行调用,如果服务端地址改变,Rpc框架就失效。因此需要一个远程服务注册中心,多个服务提供者将自己的服务注册到其中,客户端向服务注册中心申请调用。假设一个服务由多个提供者提供,其中一个失效,其余提供者也可以保障Rpc框架实现,同时还可以满足负载均衡。这次优化使用的是Nacos服务注册中心,参考了博客知识点InetSocketAddress:Nacos:实现步骤一、Nacos安装配置首先是下载解压wind原创 2020-12-23 19:27:48 · 1184 阅读 · 0 评论 -
4. 增加Kryo序列化方式
这次的优化比较简单,就是新增加了一个序列化方式kryo。参考了博客基础原理之前的Jackson序列化因为返回的底层是String类型,所以在反序列化中需要重新对传递的参数类型进行重写,kryo基于字节序列化同时不会出现反序列化过程类型错误,选用。注意目前是仅java应用,不支持跨语言。知识点Lambda表达式Kryo序列化ThreadLocal:贼全ByteArrayInputStream/ByteArrayOutputStream步骤在Maven工程中的pom.xml导入依赖。原创 2020-12-22 21:36:51 · 345 阅读 · 1 评论 -
3. Rpc优化:Netty通信
基础逻辑因为socket通信是阻塞通信,会导致线程资源浪费,因此采用同步NIO框架netty来代替原本的BIOsocket通信。二者之间的原理对比可以参考其实区别就在于多个客户端同时向服务端发出请求时,服务端是开启多线程处理(宕机风险BIO)还是只开启一个线程处理(BIO)。因此本次demo的改动就是用Netty通信代替socket通信,同时创建自己的序列化协议以及创建一个通用的序列化接口(可以后续采用多种序列化方式)来代替之前的Serializable接口。参考了博客以及博客知识点Netty原创 2020-12-21 22:25:00 · 224 阅读 · 0 评论 -
2.增加服务注册表-demo2
上一个文章说是参考,有点不好意思,其实就是复现了一下何人听我楚狂声的博客哈哈哈,这一篇同样参考的博客,不足之处还请指出,感谢!优化:服务器的多注册表首先明确服务的概念,就是服务端接口的实现类对象。demo1中的代码只允许一个服务,demo2的目的是实现服务器可以允许实现多个服务。demo2的修改都在服务端,客户端保持不变。知识点Map、 Set集合的内容、方法(add\contains\put)ConcurrentHashMap的知识点这里可以看https://zhuanlan.zhih原创 2020-12-15 19:01:21 · 187 阅读 · 0 评论 -
RPC框架简单简单简单实现
本文是对RPC框架的非常简单的实现,参考了何人听我楚狂声的博客,十分感谢!这篇博客在我看来是保姆文,好多java基础知识顺便进行回顾,还存在很多不足,后续会进行更新优化(可能)。基本原理存在一个接口,客户端想要调用接口中方法的具体实现,但是由于客户端不存在该接口的实现类,只有服务端存在该接口的实现类,也就是服务端提供的服务,所以只能向服务器端发出请求,服务器接收到客户端请求,解析处理后调用服务器本地的实现类对象,然后把调用结果返回客户端。存在的知识点接口实现: 接口是客户端和服务器端都存在的公共接原创 2020-12-14 20:11:05 · 622 阅读 · 0 评论