曾想自己做个远程方法调用,今晚心血来潮,从9点左右开始,大概做了2.5小时。
一个小小的远程方法调用框架出来了。调试顺利通过, 欣喜ing:)
关键点
1)客户端动态代理,截取方法代理远程调用。
2)服务端有线程服务就OK
考虑性能问题
1)使用对象池,作无状态使用。(测试中使用对象池反而比较慢,可能并发数不够,至少有一点可以保证--节省服务器内存开销)
2)服务端已知道需要调用的方法,故无需再动态代理,也直接可以实现AOP。
3)createRemoteInstance时,不连接服务器(本框架也不需要),只创建本地stub代理对象。
测试代码:
ISingle is=(ISingle)StubFactory.createRemoteInstance(ISingle.class);
String name=is.getName(tag);
System.out.println(name);
输出结果:
【客户端】
#6A75 Hello, my darling.
#5A37 Hello, my darling.
#1A90 Hello, my darling.
#7A28 Hello, my darling.
#2A11 Hello, my darling.
#4A93 Hello, my darling.
#8A3 Hello, my darling.
#3A44 Hello, my darling.
#9A37 Hello, my darling.
【服务端】
Running tcp services at 999 ...
accetpSocket[addr=/127.0.0.1,port=1942,localport=999]
accetpSocket[addr=/127.0.0.1,port=1943,localport=999]
accetpSocket[addr=/127.0.0.1,port=1941,localport=999]
accetpSocket[addr=/127.0.0.1,port=1937,localport=999]
accetpSocket[addr=/127.0.0.1,port=1938,localport=999]
accetpSocket[addr=/127.0.0.1,port=1940,localport=999]
accetpSocket[addr=/127.0.0.1,port=1939,localport=999]
accetpSocket[addr=/127.0.0.1,port=1935,localport=999]
accetpSocket[addr=/127.0.0.1,port=1936,localport=999]
比较粗糙,使用中逐步去完善,比如加入日志,权限。--本着轻量“短平快”的宗旨。

继续:
增加上下文传递,用ThreadLocal保存上下文变量。
这里不想增加session层,因为用作c/s结构的远程方法调用,需要构建的系统不是特别复杂,无需使用有状态的会话。另外一个原因,扩展为有状态会话也不难,就是服务对象增加客户的(连接)标识并处理请求(锁碎的事),服务对象也就是一个普通bean,放入对象池里。
无状态bean有个很大的好处,
1)无需考虑session
2)每个bean class只有一个实例,不论有多少请求,开相应的Thread即可。上下文应该是有session的概念,这里的上下文概念不同,是客户端传过来的(服务端无---无状态,也不保留登连接用户任何信息),这些数据必要,但是又不方便给方法里添加这个参数,比如用户ID。使用ThreadLocal管理是个绝妙的方法。

simple rpc framework相关推荐

  1. Raki的读paper小记:OFA: UNIFYING ARCHITECTURES, TASKS, AND MODALITIES THROUGH A SIMPLE Seq2Seq FRAMEWORK

    Abstract&Introduction&Related Work 研究任务 多模式预训练的统一范式 包括图像生成.visual-grounding(visual grounding ...

  2. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  3. 一些关于ROS的讨论 Robot Operating System – A flexible framework for writing robot software (ros.org)

    https://news.ycombinator.com/item?id=17916456 Robot Operating System – A flexible framework for writ ...

  4. 【云原生】RPC技术选型

    前言 HTTP1.0 & HTTP1.1 & HTTP2.0 & RPC HTTP1.0 无法复用连接 HTTP1.0 协议时,HTTP 调用还只能是短链接调用,每次发送请求的 ...

  5. RPC框架几行代码就够了

    转于作者梁飞在公司的Blog:  http://pt.alibaba-inc.com/wp/experience_1330/simple-rpc-framework.html 因为要给百技上实训课,让 ...

  6. 通过 yar 初识RPC

    laruence/yar: Light, concurrent RPC framework for PHP & C 鸟哥的轻量级可支持并发的 rpc 框架,基于此初识 RPC 的工作原理,及其 ...

  7. Netty RPC Demo 实现

    Netty RPC Demo 实现 简介     一个 RPC 框架 Demo 的简单实现(业务场景中还没用过RPC,但Dome应该还是有那个意思的)     完整的项目工程地址:RPC-Demo 工 ...

  8. 第四篇 - 手写RPC框架

    Github源码下载地址:https://github.com/chenxingxing6/myrpc 一.前言 RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从 ...

  9. xser php framework v0.1正式版 -- 发布

    // xser php framework => a simple php5 framework // 1. a dispatcher module // 2. a view module // ...

最新文章

  1. synchronized关键字实现原理
  2. zabbix聚合图形创建脚本
  3. 多个装饰器装饰一个函数
  4. 最短网络Agri-Net
  5. windows下RocketMQ下载、安装、部署、控制台
  6. 06_Influxdb+Grafana绘图基础
  7. php常见问题辨析(二)
  8. 恢复AndroidStudio中误删除的文件
  9. PHP版三合一收款码_附50多款模板源码
  10. excel多个工作表合并在一个表
  11. hba卡在服务器什么位置,设置服务器通过HBA卡启动目前服务器主流使用的是Qlogic和Emulex.doc...
  12. Android x86 镜像 安装到 PC 机上
  13. 小程序运营推广的方法
  14. CINTA作业一:加减乘除
  15. 2020年泰迪杯C题智慧政务中的文本数据挖掘应用--论文+全部源码分享
  16. java计算机毕业设计信用卡增值业务系统小程序用户端源码+mysql数据库+lw文档+系统+调试部署
  17. 羞羞的和成人机器人恋爱,或许这是“寂寞经济”催生的新风口
  18. 大学计算机word图文混排,WORD图文混排教学设计
  19. 【优化求解】基于遗传算法求解电动汽车充电管理优化问题Matlab代码
  20. 利用无线信号传输的远程红绿灯辨识系统

热门文章

  1. 白话智能锁—深度分析干电池漏液问题
  2. excel 将图片的链接URL 显示为图片 转
  3. 持续集成、持续交付、持续部署
  4. ecilpse导入项目后报错:Open the Java build path property page of project ‘chapter09‘
  5. libuv 源码分析 —— 1.queue
  6. CSP认证(2022-06-12)
  7. 【通信系统仿真系列】基于Matlab的汉明码(Hamming Code)纠错传输以及交织编码(Interleaved coding)仿真
  8. 2022年芜湖市科技型中小企业类科技项目申报奖励补贴条件及申报时间程序
  9. 孟郎诗词网3.0版本问题总结
  10. CSS让背景图片填满DIV