<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lizongbo at 618119.com &#187; RPC</title>
	<atom:link href="http://618119.com/category/rpc/feed" rel="self" type="application/rss+xml" />
	<link>http://618119.com</link>
	<description>工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC</description>
	<lastBuildDate>Tue, 31 Jan 2012 14:25:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>在Ubuntu 10.04上安装JDK1.6.0_21和编译配置Resin4.0.12</title>
		<link>http://618119.com/archives/2010/10/24/175.html</link>
		<comments>http://618119.com/archives/2010/10/24/175.html#comments</comments>
		<pubDate>Sat, 23 Oct 2010 16:37:48 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Resin]]></category>
		<category><![CDATA[RMI]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[JMX]]></category>
		<category><![CDATA[linode]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://618119.com/?p=175</guid>
		<description><![CDATA[在Ubuntu 10.04上安装JDK1.6.0_21和编译配置Resin4.0.12 1.首先是安装最新版的jdk,先下载JDK 1.6.0_21（来源：http://www.oracle.com/technetwork/java/javase/downloads/index.html）: root@618119.com:/usr/local/app$ wget &#8220;http://cds.sun.com/***/jdk-6u21-linux-x64.bin&#8221; 这个url里带有会话信息，现在已经无效，JDK的官方下载不提供简洁的下载地址，需要每次到页面区获取下载地址) 2.再将下载到的文件改名： root@618119.com:/usr/local/app$ mv jdk-6u21-linux-x64.bin\?BundledLineItemUUID\=SSeJ_hCwV9QAAAEroI4AHoII\&#38;OrderID\=gVSJ_hCwmL8AAAErko4AHoII\&#38;ProductID\=xKiJ_hCySHIAAAEpT7wzBGsB\&#38;FileName\=%2Fjdk-6u21-linux-x64.bin   jdk-6u21-linux-x64.bin 3.给安装程序加上可执行权限： root@618119.com:/usr/local/app$ chmod +x ./jdk-6u21-linux-x64.bin 4.开始安装JDK： root@618119.com:/usr/local/app$ ./jdk-6u21-linux-x64.bin (JDK安装好之后，可以通过符号连接建立jdk目录，这样在一行升级jdk版本的时候通过修改符号连接自动切换到新版本jdk： root@618119.com:/usr/local/app# ln -s ./jdk1.6.0_21/ ./jdk ) 5.然后添加环境变量到系统： 编辑 /etc/enviroment增加下面一行： JAVA_HOME=&#8221;/usr/local/app/jdk1.6.0_21&#8243; 添加后的/etc/environment内容如下： root@618119.com:/etc# more /etc/environment PATH=&#8221;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games&#8221; JAVA_HOME=&#8221;/usr/local/app/jdk1.6.0_21&#8243; 6.再开始下载resin4.0.12(来源：http://www.caucho.com/download/) root@618119.com:/usr/local/app# wget http://www.caucho.com/download/resin-4.0.12.tar.gz 7.解压安装文件： root@618119.com:/usr/local/app# tar -zxvf resin* 7.进入resin目录开始编译安装，安装目录设置为：/usr/local/app/resin root@618119.com:/usr/local/app# cd resin* root@618119.com:/usr/local/app/resin-4.0.12# ./configure &#8211;prefix=/usr/local/app/resin root@618119.com:/usr/local/app/resin-4.0.12# [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2010/10/24/175.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于apache mina 2.0.0 M4和google Protocol Buffers 2.0.3的java RPC实例(6.Client端的接口调用)</title>
		<link>http://618119.com/archives/2009/01/15/131.html</link>
		<comments>http://618119.com/archives/2009/01/15/131.html#comments</comments>
		<pubDate>Wed, 14 Jan 2009 17:03:07 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[apache mina]]></category>
		<category><![CDATA[google protobuf]]></category>
		<category><![CDATA[Hessian]]></category>

		<guid isPermaLink="false">http://618119.com/?p=131</guid>
		<description><![CDATA[接上一篇：http://618119.com/archives/2009/01/15/130.html 1.ProtobufRpcChannel.java(相当于thrift的TBinaryProtocol). [code] package com.lizongbo.protobufrpc; import com.google.protobuf.RpcChannel; import java.net.URL; import com.google.protobuf.Descriptors.MethodDescriptor; import com.google.protobuf.RpcController; import com.google.protobuf.Message; import com.google.protobuf.RpcCallback; import java.net.*; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class ProtobufRpcChannel implements RpcChannel { private URL serviceUrl = null; public ProtobufRpcChannel(String url) { try { try { URL.setURLStreamHandlerFactory(new HessianURLStreamHandlerFactory()); } catch (Exception ex) { ex.printStackTrace(); } serviceUrl = [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2009/01/15/131.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于apache mina 2.0.0 M4和google Protocol Buffers 2.0.3的java RPC实例(2.service端)</title>
		<link>http://618119.com/archives/2009/01/13/127.html</link>
		<comments>http://618119.com/archives/2009/01/13/127.html#comments</comments>
		<pubDate>Tue, 13 Jan 2009 15:51:33 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[apache mina]]></category>
		<category><![CDATA[google protobuf]]></category>
		<category><![CDATA[Hessian]]></category>

		<guid isPermaLink="false">http://618119.com/?p=127</guid>
		<description><![CDATA[接上一篇：http://618119.com/archives/2009/01/10/124.html 1.接口功能实现： [code] package com.lizongbo.mobileqq; import com.lizongbo.mobileqq.QQUserInfoProtos.*; import com.google.protobuf.RpcController; import com.google.protobuf.RpcCallback; public class UserInfoServiceImpl extends UserInfoService { public void getUserInfo(RpcController controller, GetUserInfoRequest request, RpcCallback < com.lizongbo.mobileqq. QQUserInfoProtos.GetUserInfoResponse > done) { GetUserInfoResponse.Builder builder = GetUserInfoResponse. newBuilder(); builder.setQqNo(request.getQqNo()); if (request.getQqNo() == 123456) { builder.setResult(0); QQUser.Builder qb = QQUser.newBuilder(); qb.setQqNo(request.getQqNo()); qb.setNickNmae("lizongbo"); qb.setPostCode("618100"); qb.setSignName("google Protocol Buffers 远程调用"); qb.setAddress("google"); builder.setUserInfo(qb); [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2009/01/13/127.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>选择或设计实现远程RPC调用所需要考虑的n个方面</title>
		<link>http://618119.com/archives/2008/08/27/107.html</link>
		<comments>http://618119.com/archives/2008/08/27/107.html#comments</comments>
		<pubDate>Wed, 27 Aug 2008 15:33:28 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Hessian]]></category>
		<category><![CDATA[RMI]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[XML-RPC]]></category>
		<category><![CDATA[google protobuf]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2008/08/27/107.html</guid>
		<description><![CDATA[选择或设计实现远程RPC调用所需要考虑的n个方面 (前段时间记录的零散片段，却一直没时间仔细整理，仅记录在此，以做备忘。) 可参考协议(组件)为： http,smtp,pop,ftp,dns，burlap,json,xml-rpc,xmpp,smpp,rmi,soap,hessian,thrift ， protocol buffers等等 需要考虑以下方面： 必备条件： a.多语言支持 b.强大的序列化和反序列化(xml,text,pdu,text+stream) c.多种传输模式 1.服务端所支持的编程语言。 java,C,C++,C#,PHP等等 2.客户端支持的语言。 java,C,C++,JavaScript等 3.字节流转码。 支持GBK,UTF-8等。 4.支持的基础数据类型。 char,int,long,double,floadt,boolean,List,Map,Object(Struct) 5.同名重载方法区别 6.支持数据包的转发代理 （前端负载均衡） 7.自定义超时连接 8.数据包转换 （对象的序列化和反序列化） 9.数据类型扩展 10.类与接口实现的约束 11.是否支持负载限制 （比如超过100并发时，直接返回系统忙） 12.failover处理 13.事务控制 14.异步调用 15.数据包版本自动识别 16.TCP/UDP支持 (UDP 有1472字节限制。) 17.代码生成器（主要针对数据包的序列化） 18.与现有框架的整合难度(组件化程度) 19.大文件传输 21.数据包序列化效率 客户端连接池 应用范围 22.网络带宽约束（数据包是否支持压缩） 23.服务接口监控统计 数据包加密 SSL支持 是否需要握手消息(是需多次交互还是简单的请求应答模式) 调试抓包的方便性 是否支持双向调用(xmpp支持) 部署难易程度 参数配置难度 是否支持请求队列 请求应答的对应关系 协议可读性 [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/08/27/107.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HessianServlet和HessianProxyFactory的配置参数</title>
		<link>http://618119.com/archives/2008/07/27/106.html</link>
		<comments>http://618119.com/archives/2008/07/27/106.html#comments</comments>
		<pubDate>Sun, 27 Jul 2008 06:20:13 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Hessian]]></category>
		<category><![CDATA[RPC]]></category>

		<guid isPermaLink="false">http://618119.com/?p=106</guid>
		<description><![CDATA[HessianServlet和HessianProxyFactory的配置参数 home-class，service-class,表示Service的实现类的类名 home-api，api-class，是Service的接口类名 object-class,不太了解 object-api，不太了解， debug,调试开关，默认为false，需要设置为true的时候，值必须是&#8221;true&#8221;，区分大小写(不建议设置为true) send-collection-type,设置SerializerFactory是否在序列化的数据里传递集合类的类型名，默认为true,需要设置为false的时候， 值必须是&#8221;false&#8221;，区分大小写(不建议设置为false) 其实 SerializerFactory还有个 _isAllowNonSerializable属性，控制是否接受对没有实现 java.io.Serializable接口的对象， 通过setAllowNonSerializable来控制， 默认是不接受，为false，而HessianServlet却没提供这个参数的控制开关，因此如果要支持传输没有实现java.io.Serializable接口的对象， 则需要继承HessianServlet来加上相应控制，重载getSerializerFactory方法来设置参数或增加扩展的SerializerFactory, 而无法通过直接配置HessianServlet的初始化参数来实现。 先前提到的 hessian  3.1.5里hession2.0 有bug ，在hessian 3.1.6里依然存在,在hessian 3.2.0中将被修正. 参考： http://maillist.caucho.com/pipermail/hessian-interest/2008-July/000405.html ServiceContext存放了线程局部变量request, ServiceContext.getContextRequest() HessianProxyFactory 设置的 _isOverloadEnabled 可支持同名重载方法。 不过不建议在接口中使用同名方法和变长参数。 _user和_password是设置 http basic认证的用户名和密码。 _isDebug，调试开关 _isHessian2Reply，_isHessian2Request，是否使用hessian 2.0协议发送请求。 _isChunkedPost,设置Chunked编码方式发送请求。 Tags: Hessian, RPC]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/07/27/106.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>cygwin环境下调试thrift的例子</title>
		<link>http://618119.com/archives/2008/07/18/104.html</link>
		<comments>http://618119.com/archives/2008/07/18/104.html#comments</comments>
		<pubDate>Fri, 18 Jul 2008 10:41:30 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[RPC]]></category>
		<category><![CDATA[google protobuf]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2008/07/18/104.html</guid>
		<description><![CDATA[thift是facebook的rpc调用框架，和google protobuf相比，额外多提供了rpc server和client的框架。 1.下载 http://www.cygwin.com/setup.exe 来源 http://www/cygwin.com 2.双击setup.exe 3.按照安装提示“下一步” 4.选择从“互联网”安装： 5.选择安装的路径为d:\Cygwin，选择本地临时目录d:\Cygwindown，用于存放下载的软件；选择连接互联网的方式，选“直接连接”。 6.选择下载源，直接在URL里输入http://www.cygwin.cn/pub/，点 Add 7.根据安装提示，选择需要安装的软件包，需要选择： Cygwin or MinGW GNU build tools (autoconf 2.60, automake 1.10, libtool 1.5.24) boost 1.33.1+ g++ 4.0+ bison 2.3-1 boost 1.33.1-4 boost-devel 1.33.1-4 flex 2.5.33-1 pkgconfig libtool (参考：http://wiki.apache.org/thrift/ThriftInstallationWin32， 在devel目录下选择这些包， 另外还需要选 make (the GNU version of &#8216;make&#8217; utility )， 否则在最后执行 make的时候回被提示错误： bash: make: [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/07/18/104.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>hessian 3.1.5的bug及相关例子</title>
		<link>http://618119.com/archives/2008/04/12/81.html</link>
		<comments>http://618119.com/archives/2008/04/12/81.html#comments</comments>
		<pubDate>Sat, 12 Apr 2008 14:26:17 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Hessian]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[apache mina]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2008/04/12/81.html</guid>
		<description><![CDATA[hessian 3.1.5的下载地址在： http://hessian.caucho.com/download/hessian-3.1.5.jar http://hessian.caucho.com/download/hessian-3.1.5-src.jar http://hessian.caucho.com/download/hessian-test.jar 来源： http://hessian.caucho.com/#Java 假如客户端以Hessian2协议进行传输数据，以HessianMetaInfoAPI接口方式调用_hessian_getAttribute方法。 那么com.caucho.hessian.server.HessianSkeleton.java里， 在调用的 第  160行的地方，缺少一句  out.close(); 其它几个return的地方，也缺少 out.close(); 否则会遇到如下的错误信息 Caused by: com.caucho.hessian.io.HessianProtocolException: expected hessian reply at end of file ? at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2701) at com.caucho.hessian.io.Hessian2Input.startReply(Hessian2Input.java:405) at com.lizongbo.hessian.client.HessianProxy.invoke(HessianProxy.java:65) 独立使用 HessianSkeleton进行处理的时候， //HessianSkeleton hs=null; //Hessian2Input h2i=null; try { h2i.readCall(); //这行代码非常重要，否则无法正确调用invoke。HessianServlet里有类似的调用 // 对应的是   int code = in.read(); //     int major = in.read(); //      [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/04/12/81.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

