首页 文章 精选 留言 我的

精选列表

搜索[高性能rpc框架],共10000篇文章
优秀的个人博客,低调大师

分布式系统开发工具包 —— 基于Hessian的HTTP RPC调用技术

Hessian官网:http://hessian.caucho.com/ hessian是二进制web service协议。 Hessian介绍 创建Hessian服务包括四个步骤: 创建Java接口,用于提供公开服务 使用HessianProxyFactory创建客户端 创建服务实现类 在servlet引擎中配置服务 HelloWorld服务 public interface BasicAPI { public String hello(); } 服务实现 public class BasicService extends HessianServlet implements BasicAPI { private String _greeting = "Hello, world"; public void setGreeting(String greeting) { _greeting = greeting; } public String hello() { return _greeting; } } 客户端实现 String url = "http://hessian.caucho.com/test/test"; HessianProxyFactory factory = new HessianProxyFactory(); BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url); System.out.println("hello(): " + basic.hello()); 部署标准web.xml <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <param-name>home-class</param-name> <param-value>example.BasicService</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>example.Basic</param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/hello</url-pattern> <servlet-name>hello</servlet-name> </servlet-mapping> </web-app> Hessian序列化 Hessian类可以用来做序列化与反序列化 序列化 Object obj = ...; OutputStream os = new FileOutputStream("test.xml"); Hessian2Output out = new Hessian2Output(os); out.writeObject(obj); os.close(); 反序列化 InputStream is = new FileInputStream("test.xml"); Hessian2Input in = new Hessian2Input(is); Object obj = in.readObject(null); is.close(); 如果要序列化比基础类型或String类型更加复杂的java对象,务必确保对象实现了java.io.Serializable接口。 Hessian处理大量数据 分布式应用需要发送大量二进制数据时,使用InputStream会更加有效率,因为它避免了分配大量byte数组。方法参数中只有最后一个参数可能是InputStream,因为数据是在调用过程中读的。 下面是一个上传文件的API的例子 package example; public interface Upload { public void upload(String filename, InputStream data); } 如果返回结果是InputStream,客户端必须在finally块中调用InputStream.close()方法,因为Hessian不会关闭底层HTTP流,直到所有数据被读取并且input stream被关闭。 文件下载API: package example; public interface Download { public InputStream download(String filename, InputStream data); } 文件下载实现: InputStream is = fileProxy.download("test.xml"); try { ... // read data here } finally { is.close(); } 原文发布于:http://www.yesdata.net/2018/03/11/hessian/

优秀的个人博客,低调大师

高性能 Python 解释器 PyPy 已从 Mercurial 迁移到 Git

PyPy已将其官方仓库和问题跟踪器从 https://foss.heptapod.net/pypy/pypy 迁移到 https://github.com/pypy/pypy,也正式从 Mercurial 转移到 Git。 官方团队仍然认为Mercurial是更好的版本控制系统,命名分支模型和用户界面都优于其它选择,但foss.heptapod.net在google/bing/duckduckgo搜索中的索引并不完善,所以人们很难搜索到项目中的 issue。除此之外,还有其它一些迁移原因: 自从Heptapod加强了垃圾邮件控制后,经常会收到报告说用户创建的 issue 会被标记为垃圾邮件。 开源已经成为GitHub的代名词。 当前大部分开发都是在修复 issue,如果所有代码都在同一个平台上,那么跟踪交错 issue 就更容易了。 社区虽然提出了两个反对迁移的论点。但事实证明没有迁移到 GitHub 会阻碍贡献和报告 issue。 希望继续使用Mercurial 的人可以使用相同的方法在 GitHub上操作。 GitHub比foss.heptapod.net资源更丰富,可以添加CI作业来替换一些老化的buildbot基础设施。 PyPy 是一个兼容性强大的Python 解释器,几乎是 CPython 2.7 与 3.6 的直接替代品。 此次变更,具体影响开发操作等信息,可以查看官方通告:https://www.pypy.org/posts/2023/12/pypy-moved-to-git-github.html

优秀的个人博客,低调大师

高性能日志库 go-logger v2.0.3 发布

go-logger v2.0.3发布,该版本主要针对性能进行优化. github地址:https://github.com/donnie4w/go-logger go的结构化日志库非常多,go-logger是比较早期开发的一个库, 以简洁为主要特征。simplelog是后期给数据库binlog日志开发的一个日志库,由于功能与go-logger有重合,就把两个库的代码就合并了。目前两个库代都会一起更新,实现是一致的。 go1.21版本就在标准库加上结构化日志库log/slog,该日志库性能非常优越,根据压测结果,slog的性能要比社区常用的第三方结构化日志库好许多,所以大部分项目日志库可以直接使用slog。 go-logger 将继续维护,原因是: go-logger 比slog占用更少的内存,效率比slog更高 go-logger 对日志文件处理,如 日志文件按大小切分备份,按日期:月,日,时切分备份,日志文件压缩备份,日志文件限制最大文件数等特性,目前slog还不具备这些特征。 go-logger 函数文档 性能测试数据: 输出数据: 2023-09-30T17:37:15.008+0800 DEBUG logtest/benchmark_test.go:103 >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/09/30 17:37:19 benchmark_test.go:115: >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/06/10 01:25:55.028277 log_test.go:46:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/06/10 01:25:55.028277 log_test.go:55:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa time=2023-09-30T17:37:38.395+08:00 level=INFO source=benchmark_test.go:164 msg=>>>aaaaaaaaaaaaaaaaaaaaaaa 参数说明: ns/op: 每执行一次消耗的时间 B/op:每执行一次消耗的内存 allocs/op:每执行一次分配内存次数 结果说明: 不同日志库输出的数据大小是一致的 Zap:uber 官方go日志库,测试中是 常规格式(包含文件名行号) debug日志输出 Logger:go-logger 测试中是 常规格式(包含文件名行号) debug日志输出 LoggerNoFORMAT: 为go-logger去格式化日志输出 LoggerWrite: 为go-logger提供的原始数据高速写入文件的方法,原是simplelog高效输出数据库binlog日志数据的方法 Slog:官方 log/slog 测试为常规格式(包含文件名行号)info 日志输出 可以看到 测试数据 时间消耗: go-logger 4500ns/op左右 , slog与zap大致在5600ns/op 左右 内存消耗:go-logger 64B , slog与zap大致在330ns/op 左右 不同机器跑测试程序会有不同的结果,这个主要是一个比较作用。 测试结果: 性能 : go-logger > slog ≥ zap 内存消耗 : go-logger 远小于 slog 与 zap 说明:go-logger 性能与内存上的优势,主要归功于其内存使用上的优化 多次测试结果: 对比可知,不同时间测试结果都相似 可以看到,这几个日志库的性能都非常高。可以根据项目的实际需求选择使用任一日志库。 如果对性能与内存要求苛刻或对日志文件备份处理有要求时, 建议使用go-logger。 如果官方日志库slog已经能满足项目需求,建议使用slog,由官方维护的库总是靠谱的;对于一般业务来说:性能4500ns/op与5600ns/op 并无实质区别。 go-logger 会持续进行优化和维护,包括功能与性能. 测试程序

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册