- 浏览: 123378 次
- 性别:
- 来自: 北京
博客专栏
-
httclient实践与源...
浏览量:0
文章分类
- 全部博客 (141)
- java设计模式 (6)
- oracle (2)
- spring (0)
- java多线程 (12)
- Effective Java 读书笔记 (5)
- mysql (11)
- 书签 (2)
- Web前端 (2)
- python (6)
- 技术博客 (6)
- 搬家 (2)
- android (1)
- java (18)
- 架构 (6)
- linux (14)
- memcached (3)
- 测试 (1)
- 网络 (1)
- 高性能WEB (2)
- http (1)
- java io (2)
- jdbc (1)
- php (5)
- css (2)
- jenkins (1)
- jfinal (1)
- maven (3)
- 算法 (3)
- 代码规范 (1)
- shell (3)
- 安全 (1)
- fastJson源码剖析 (0)
- jdk源码分析 (0)
- git (1)
- 分布式知识点 (0)
- 分布式 (1)
- tcp (1)
- cpu (2)
- 软技能 (1)
- 编译原理 (1)
- 操作系统 (1)
- java虚拟机 (1)
- 处理器 (1)
- tbschedule (1)
- 需要看的源码 (1)
- idea (1)
- zookeeper (1)
- httpclient (1)
最新评论
-
lliiqiang:
功能是关键,但是因为人的性能有限,所以性能也有可能是功能,
关于有效的性能调优的一些建议 -
huangyunbin:
呵呵,感觉和缓存很相似,已经存在的直接缓存里取,缓存没有的话加 ...
享元模式
转自梁飞博客
package com.alibaba.study.rpc.framework; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.net.ServerSocket; import java.net.Socket; /** * RpcFramework * * @author william.liangf */ public class RpcFramework { /** * 暴露服务 * * @param service 服务实现 * @param port 服务端口 * @throws Exception */ public static void export(final Object service, int port) throws Exception { if (service == null) throw new IllegalArgumentException("service instance == null"); if (port <= 0 || port > 65535) throw new IllegalArgumentException("Invalid port " + port); System.out.println("Export service " + service.getClass().getName() + " on port " + port); ServerSocket server = new ServerSocket(port); for(;;) { try { final Socket socket = server.accept(); new Thread(new Runnable() { @Override public void run() { try { try { ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); try { String methodName = input.readUTF(); Class<?>[] parameterTypes = (Class<?>[])input.readObject(); Object[] arguments = (Object[])input.readObject(); ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); try { Method method = service.getClass().getMethod(methodName, parameterTypes); Object result = method.invoke(service, arguments); output.writeObject(result); } catch (Throwable t) { output.writeObject(t); } finally { output.close(); } } finally { input.close(); } } finally { socket.close(); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } catch (Exception e) { e.printStackTrace(); } } } /** * 引用服务 * * @param <T> 接口泛型 * @param interfaceClass 接口类型 * @param host 服务器主机名 * @param port 服务器端口 * @return 远程服务 * @throws Exception */ @SuppressWarnings("unchecked") public static <T> T refer(final Class<T> interfaceClass, final String host, final int port) throws Exception { if (interfaceClass == null) throw new IllegalArgumentException("Interface class == null"); if (! interfaceClass.isInterface()) throw new IllegalArgumentException("The " + interfaceClass.getName() + " must be interface class!"); if (host == null || host.length() == 0) throw new IllegalArgumentException("Host == null!"); if (port <= 0 || port > 65535) throw new IllegalArgumentException("Invalid port " + port); System.out.println("Get remote service " + interfaceClass.getName() + " from server " + host + ":" + port); return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class<?>[] {interfaceClass}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable { Socket socket = new Socket(host, port); try { ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); try { output.writeUTF(method.getName()); output.writeObject(method.getParameterTypes()); output.writeObject(arguments); ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); try { Object result = input.readObject(); if (result instanceof Throwable) { throw (Throwable) result; } return result; } finally { input.close(); } } finally { output.close(); } } finally { socket.close(); } } }); } } /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.study.rpc.test; /** * HelloService * * @author william.liangf */ public interface HelloService { String hello(String name); } (2) 实现服务 /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.study.rpc.test; /** * HelloServiceImpl * * @author william.liangf */ public class HelloServiceImpl implements HelloService { public String hello(String name) { return "Hello " + name; } } (3) 暴露服务 /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.study.rpc.test; import com.alibaba.study.rpc.framework.RpcFramework; /** * RpcProvider * * @author william.liangf */ public class RpcProvider { public static void main(String[] args) throws Exception { HelloService service = new HelloServiceImpl(); RpcFramework.export(service, 1234); } } (4) 引用服务 /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.study.rpc.test; import com.alibaba.study.rpc.framework.RpcFramework; /** * RpcConsumer * * @author william.liangf */ public class RpcConsumer { public static void main(String[] args) throws Exception { HelloService service = RpcFramework.refer(HelloService.class, "127.0.0.1", 1234); for (int i = 0; i < Integer.MAX_VALUE; i ++) { String hello = service.hello("World" + i); System.out.println(hello); Thread.sleep(1000); } } }
发表评论
-
java Unsafe类
2018-03-20 20:55 450http://ifeve.com/sun-misc-unsaf ... -
java 之DelayQueue实际运用示例
2016-06-15 17:09 540http://www.cnblogs.com/sunzhenc ... -
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
2015-07-03 19:11 702window下在同一台机器上安装多个版本jdk,修改环境变量不 ... -
java实现base64
2015-04-29 15:30 543BASE64和其他相似的编码算法通常用于转换二进制数据为文本数 ... -
最全的静态网站生成器(开源项目)
2015-04-26 00:53 538最全的静态网站生成器(开源项目) http://www.ite ... -
关于有效的性能调优的一些建议
2015-04-19 12:09 768关于有效的性能调优的 ... -
java 代码时间和内存测试
2015-04-18 22:26 643// 测试用了多少内存 import java.util ... -
系统打印日志的10条建议(翻译)
2015-04-14 14:33 504http://uptoknow.iteye.com/blog/ ... -
Java编程最差实践
2015-04-14 14:32 413http://macrochen.iteye.com/blog ... -
58龙哥教你“如何做系统性能优化”(纯干货)
2015-04-12 21:58 613如何做系统性能优化 性能优化的目标是什么?不外乎两个: 时间 ... -
java 关于for和foreach,兼顾效率与安全
2014-12-05 14:46 17456关于for和foreach,兼顾效率与安全 对于数组的访问,是 ... -
java 关于for循环
2014-12-05 14:41 582关于使用for循环 有人喜欢使用for作类似while的循环: ... -
会话COOKIE? 持久COOKIE?
2014-11-07 00:15 582关于COOKIE和SESSION的关系,一直没搞清楚。网上一搜 ... -
内存cookie与持久cookie
2014-11-05 22:27 588cookie分两种 :会话cookie(session coo ... -
Java字符串底层理解
2014-09-11 15:11 7601. 栈(stack)与堆(heap)都是 ... -
java 字符串相加
2014-09-10 14:01 1532字符串相加。string + (原作者: 火龙果) 为了加 ... -
java虚拟机垃圾回收深入理解
2013-03-18 17:52 924JAVA学习之4 引用与JVM 1.java内存管理分为内存分 ...
相关推荐
RpcFramework类的Java代码实现了RPC框架的核心逻辑。代码中使用了Java反射机制和代理模式来实现服务暴露和服务调用。代码还使用了ServerSocket和Socket对象来实现服务端口的监听和服务请求的处理。 知识点8:RPC...
rest_rpc c++11, high performance, cross platform, ...rest_rpc为用户提供了非常简单易用的接口,几行代码就可以实现rpc通信了,来看第一个例子 一个加法的rpc服务 //服务端注册加法rpc服务 struct dummy{ int add(r
3. **易于使用**:Kryonet的API设计简洁明了,只需几行代码就可以建立服务器和客户端,并进行数据交换。 4. **高效性能**:由于Kryo的高性能特性,Kryonet在网络通信中表现出色,特别是在大数据量或者高并发场景下...
提供简单直观的API接口,无论是服务端还是客户端,只需几行代码即可快速实现远程调用。 8. **服务治理**: 支持服务注册、发现和负载均衡,便于构建大规模分布式系统。 9. **异步处理**: 支持异步调用,可以...
只需几行代码,就可以设置好RPC通道。 - **类型安全**:由于基于TypeScript,Comlink支持类型检查,增强了开发者的代码质量。 - **跨环境兼容**:Comlink不仅适用于Node.js,还可在Web Workers和Service Workers等...
分布式(多进程)架构,几行代码实现一个功能服务器的搭建 多线程设计,注解方式配置,轻松管理所有消息流 强大的RPC功能,调用远程RPC近似于调用本地函数,无需手工定义内部协议 支持插件功能,轻松实现功能插件 框架...
通过几行代码,开发者就可以创建临时文件并确保它们在适当的时候被清理。 4. **安全性**:tmpfriend通过合理地命名和存放临时文件,降低因未及时清理临时文件而引发的安全风险。例如,它可能使用随机生成的文件名,...
它简化了日志配置,只需几行代码就可以启用基本的日志功能。与`org.slf4j.api_1.6.4.jar`一起使用,可以为Thrift应用程序提供基础的日志支持。 综上所述,这个“thriftDependencyJar”压缩包为使用Java进行Thrift...
编写和使用RMI服务和客户端程序相对简单,服务程序只需几行代码就可以声明为远程服务,其余部分与普通Java对象相似。RMI还能够与现有系统集成,如通过Java Native Interface (JNI) 与非Java服务器通信,或者利用JDBC...
在Java应用中,只需几行代码,就可以实现Groovy脚本的编译和执行: ```java GroovyShell shell = new GroovyShell(); Script script = shell.parse(new File("path/to/your/groovy/script.groovy")); script.run();...
通过几行代码,一个应用就可以生成一个高度可扩展的逐出器来高效地管理持久对象。 ICE 框架的优势之一是支持多语言分布式互联。服务端可以采用 C++/Java/Python/C# 等实现,客户端可以采用 C++/Java/Python/C#/VB/...
这样,原本需要复杂服务器端代码实现的RPC调用,现在只需在JSP页面中添加几行标记即可完成。 **JRP的特性** 1. **易用性**:JRP通过JSP标签简化了RPC方法的创建,使得开发者无需深入理解RPC协议的底层细节。 2. **...
易于集成,Gohalt提供了单独的软件包,其中包含许多内置的中间件,用于与stdlib和其他库进行简单(几行代码)集成,其中包括:io,rpc / grpc,http,sql,gin。 度量意识,Gohalt可以使用Prometheus度量作为限制...
`gradio`的使用非常简单,只需要几行代码即可创建一个交互式UI。例如,如果你有一个预测温度的模型,可以这样使用: ```python import gradio as gr def predict_temperature(temp): # 这里是你的模型预测代码 ...
例如,只需几行代码就能创建一个简单的服务器或客户端。 9. **社区活跃与文档完善**:Netty拥有活跃的社区,不断更新版本并修复问题。同时,官方提供了详尽的文档和丰富的示例,帮助开发者快速上手和解决问题。 10...
无论是同步调用还是异步调用,都只需要几行代码即可实现。 3. **序列化与反序列化**:Hprose内置了强大的序列化机制,能够自动处理各种类型的数据,包括基本类型、对象、数组、列表、字典等,无需额外的序列化和反...
仅需几行启动代码,您的Python程序便成为Erlang网络节点,并参与了Erlang集群。文献资料浏览 或者通过运行make docs (由Sphinx生成)来构建自己的make docs 。支持与问题因为当你绝对需要援助和电子邮件太慢的时候...
实际上,使用PHP内置SOAP扩展实现WebService,只需简单几行代码即可完成Web服务的客户端调用。这使得PHP在Web开发中更加灵活和强大,尤其是在需要与其他系统进行交互的场景中。随着Web服务的不断普及,掌握SOAP协议...
例如,要获取Zabbix中的主机信息,只需几行代码即可实现: ```perl use Zabbix::Tiny; my $zapi = Zabbix::Tiny->new( url => 'http://your-zabbix-server/zabbix/api_jsonrpc.php', user => 'admin', password...