<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>andot</title>
    <description>Bindows 中文站
http://www.bindows.net.cn
http://bindows.net.cn

CoolCode.CN
http://www.coolcode.cn</description>
    <link>http://andot.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Re: 取代 DWR 的好东西—— PHPRPC for Java</title>
        <author>andot</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andot.javaeye.com">andot</a>&nbsp;
          链接：<a href="http://andot.javaeye.com/blog/89471" style="color:red;">http://andot.javaeye.com/blog/89471</a>&nbsp;
          发表时间: 2007年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下面是原来那个例子的 3.0 写法：<br /><br />服务器端：<br /><br />[code:1]
 &lt;%@ page import="org.phprpc.*" %>
 &lt;%
 PHPRPC_Server phprpc_server = new PHPRPC_Server();
 phprpc_server.add("min", Math.class);
 phprpc_server.add(new String[] { "sin", "cos" }, Math.class);
 phprpc_server.start(request, response);
 %>
[/code:1]

大家会发现，这个跟原来差不多，但是类名已经改为 PHPRPC_Server 了，这样做是为了跟其它语言的名称统一。另外，request，response 和 session 这三个参数从构造方法中移除了，而取而代之的是，通过 start 方法传入 request 和 response。这样做的好处是。 PHPRPC_Server 创建并添加完发布方法后，可以放到 session 中保存（前提是 session 是保存在内存中的），然后从 session 中取出来后，可以直接用 start 方法发布。这样可以起到一定的加速作用。

<pre name="code" class="java">
&lt;html>
&lt;head>
&lt;script type="text/javascript" src="phprpc_client.js">&lt;/script>
&lt;/head>
&lt;body>

min(&lt;input id="a" type="text" />, &lt;input id="b" type="text" />) &lt;input id="minbtn" type="button" value="=" /> &lt;input id="c" type="text" />

&lt;script type="text/javascript">
var a = document.getElementById("a");
var b = document.getElementById("b");
var c = document.getElementById("c");

var rpc_client = new PHPRPC_Client('http://localhost:8080/server.jsp', ['min']);

document.getElementById("minbtn").onclick= function() {
    c.value = "loading...";
    rpc_client.min(a.value, b.value, function (result) {
        c.value = result;
    });
}
&lt;/script>
&lt;/body>
&lt;/html>
</pre><br />而客户端变得更加简单了。初始化时可以直接指定服务器地址，并且可以将远程方法名以数组的形式传递给客户端，这样就省去了跟服务器的首次通讯过程。而且这样做之后，后面也不再需要等待客户端准备好的状态了，所以，就再也不会看到 RPC not ready 的提示啦！另外，字符串类型也不需要事先转换成 Number 类型了，服务器会自动进行这种弱类型之间的转换。
          <br/>
          <span style="color:red;">
            <a href="http://andot.javaeye.com/blog/89471#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Jun 2007 15:31:54 +0800</pubDate>
        <link>http://andot.javaeye.com/blog/89471</link>
        <guid>http://andot.javaeye.com/blog/89471</guid>
      </item>
  </channel>
</rss>