精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-16
首先感谢lz的分享
然后最好能再细点,就是serialize,deserialize时间和序列化后文件大小都能做下对比 不同条件的服务器会有不同方面的考量 |
|
返回顶楼 | |
发表时间:2012-10-16
跟这个是什么关系?
http://coderplay.iteye.com/blog/419907 |
|
返回顶楼 | |
发表时间:2012-10-16
Json序列化反序列化都比avro快?
|
|
返回顶楼 | |
发表时间:2012-10-16
helloqiner 写道 Json序列化反序列化都比avro快?
这里Json用的阿里开源的FastJson,FastJson在性能方面做过很多优化,所以其性能确实比较好。FastJson序列化反序列化都比avro快,应该也不是绝对的,不同的测试数据,可能会有不同的结果,我这里这是测试只是用了一个比较简单的POJO对象 |
|
返回顶楼 | |
发表时间:2012-10-16
runshine 写道 跟这个是什么关系?
http://coderplay.iteye.com/blog/419907 Avro 是一个数据序列化框架。 avro_rpc 是一个RPC框架,其中使用了avro的序列化,当然还支持其他多种序列化方式 |
|
返回顶楼 | |
发表时间:2012-10-17
最后修改:2012-10-17
invokeSync 和invokeAsync 这样调用不够人性化,可以考虑创建代理对象的方式。对于异步方式,考虑使用注解方式,异步返回结果对象类型为Future<?>
public class RpcClientInvocationHandler implements InvocationHandler { private IClient client; public RpcClientInvocationHandler(IClient client) { this.client = client; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String beanName = proxy.getClass().getInterfaces()[0].getName(); String methodName = method.getName(); Object result = client.invokeSync(beanName, methodName, method.getParameterTypes(), args, method.getReturnType(), SerializerFactory.SERIALIZER_JSON); return result; } } public class RpcClientProxyFactory { @SuppressWarnings("unchecked") public <T> T create(Class<T> serviceInterface, String address, int port) throws IOException { ITransceiver transceiver = new NettyTransceiver(); IClient client = new RPCClient("localhost", 7001, transceiver); return (T)Proxy.newProxyInstance( RpcClientProxyFactory.class.getClassLoader(), new Class<?>[] { serviceInterface }, new RpcClientInvocationHandler(client)); } } 客户端可以增加几个特性: 1:创建多个连接访问服务端,增加并发处理能力。 2:连接超时设置。 |
|
返回顶楼 | |
发表时间:2012-10-18
最后修改:2012-10-18
melin 写道 invokeSync 和invokeAsync 这样调用不够人性化,可以考虑创建代理对象的方式。对于异步方式,考虑使用注解方式,异步返回结果对象类型为Future<?>
public class RpcClientInvocationHandler implements InvocationHandler { private IClient client; public RpcClientInvocationHandler(IClient client) { this.client = client; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String beanName = proxy.getClass().getInterfaces()[0].getName(); String methodName = method.getName(); Object result = client.invokeSync(beanName, methodName, method.getParameterTypes(), args, method.getReturnType(), SerializerFactory.SERIALIZER_JSON); return result; } } public class RpcClientProxyFactory { @SuppressWarnings("unchecked") public <T> T create(Class<T> serviceInterface, String address, int port) throws IOException { ITransceiver transceiver = new NettyTransceiver(); IClient client = new RPCClient("localhost", 7001, transceiver); return (T)Proxy.newProxyInstance( RpcClientProxyFactory.class.getClassLoader(), new Class<?>[] { serviceInterface }, new RpcClientInvocationHandler(client)); } } 客户端可以增加几个特性: 1:创建多个连接访问服务端,增加并发处理能力。 2:连接超时设置。 感谢 melin的建议。如果是同步调用,使用代理确实使用上方便简单。如果是异步调用,我觉得还是用回调方式处理性能更好,如果用Future,还是需要阻塞一个获取结果的线程,这样就失去使用异步提高并发处理能力的目的了 关于同一个客户端需要多个连接访问服务端,没必要。因为连接是可以复用的,每个方法调用都带有个int类型的标识号。 连接超时与调用超时,有一个全局的设置。如果需要针对每个方法设置调用超时时间,需要稍微修改下 |
|
返回顶楼 | |
发表时间:2012-10-19
做了一个简单的测试,调用10000次服务,没有spring rmi快!
同一台机器上测试, |
|
返回顶楼 | |
发表时间:2012-10-23
melin 写道 做了一个简单的测试,调用10000次服务,没有spring rmi快!
同一台机器上测试, RMI依靠Java序列化机制,而java序列化性能吞吐量并不高,楼上吧测试方法说详细点 |
|
返回顶楼 | |
发表时间:2012-11-23
最后修改:2012-11-23
请问一下: 我运行代码里面的 TestClient.java , 运行之后 程序没有关闭,多运行几次就多打开几个连接 (调用完了能关闭客户端连接不), 如果要用在系统当中的话 ,是不是需要对 TestClient做处理,不能每次调用都 new一个 TestClient对象吧, 太弱了,整不明白!
|
|
返回顶楼 | |