<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    phprcp 以及和spring的集成

    Posted on 2010-01-28 10:50 瘋狂 閱讀(2394) 評論(1)  編輯  收藏 所屬分類: spring

     

    PHPRPC 是一個輕型的、安全的、跨網際的、跨語言的、跨平臺的、跨環境的、跨域的、支持復雜對象傳輸的、支持引用參數傳遞的、支持內容輸出重定向的、支持分級錯誤處理的、支持會話的、面向服務的高性能遠程過程調用協議。

    通過兩個例子來簡單入門下:
    下載:PHPRPC 3.0.2 for Java , 當然要使用3.0.2 在這之前不支持集合類型,然后雙擊make.bat生成服務與客戶端(當然環境變量要設置的,老在myeclipse里開發,從來不設置,這下又敲半天。),生成phprpc.jar和phprpc_client.jar還有phprpc_spring.jar 3個jar,在沒有集成spring的時候將phprpc.jar和phprpc_client.jar分別放到服務端可客戶端的lib下
    1,servlet(或者jsp)模式:
    首先建立接口:

    public interface Hello {

     public String sayHi(String name);
     public TestPo getPo(TestPo po);
     public List<TestPo> getPos(List<TestPo> pos);

    實現:

    public class HelloImpl implements Hello {

     public String sayHi(String name) {
      // TODO Auto-generated method stub
      return "Hi,"+name;
     }
     public TestPo getPo(TestPo po) {
      System.out.println("client :"+po.toString());
      return new TestPo("server name", "server address");
     }
     public List<TestPo> getPos(List<TestPo> pos) {
      List<TestPo> ps = new ArrayList<TestPo>();
      for (int i = 0; i < pos.size(); i++) {
       ps.add(new TestPo("server name_"+i,"server address_"+i));
       System.out.println(pos.get(i).toString());
      }
      return ps;
     }

    Testpo.java 需要序列化

    public class TestPo implements Serializable{

     private static final long serialVersionUID = 1L;
     private String name;
     private String address;
     public TestPo(String name, String address) {
      super();
      this.name = name;
      this.address = address;
     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public String getAddress() {
      return address;
     }
     public void setAddress(String address) {
      this.address = address;
     }
     @Override
     public String toString() {
      return "TestPo [address=" + address + ", name=" + name + "]";
     }
     
    }

    服務類:

    public class PHPrcpServer extends HttpServlet {


     @Override
     protected void service(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      // TODO Auto-generated method stub
      Hello hello = new HelloImpl();   
      PHPRPC_Server phprpc_server = new PHPRPC_Server();   
      phprpc_server.add(hello);   
      phprpc_server.start(request, response);   

     }


    }
    配置:
    <servlet>
            <servlet-name>PHPrcpServer</servlet-name>
        <servlet-class>com.server.phprcp.PHPrcpServer</servlet-class>
      </servlet>
    <servlet-mapping>
        <servlet-name>PHPrcpServer</servlet-name>
        <url-pattern>/servlet/PHPrcpServer</url-pattern>
      </servlet-mapping> 
    客戶端:
    PHPRPC_Client client = new PHPRPC_Client("http://localhost:8080/serverspring/servlet/PHPrcpServer"); 
      
             Hello m = (Hello) client.useService(Hello.class);   
             System.out.println(m.sayHi("chenlb"));
            
             TestPo po = m.getPo(new TestPo("clent name","client address"));
             System.out.println(po.toString());
            
             List<TestPo> pcs = new ArrayList<TestPo>();
             for (int i = 0; i < 20; i++) {
        TestPo poc = new TestPo("client_name_"+i,"client_address_"+i);
        pcs.add(poc);
       }
            
             List<TestPo> pl = m.getPos(pcs);
             for (int i = 0; i < pl.size(); i++) {
        System.out.println(pl.get(i).toString());
       }

    2 于spring的集成:
    當然需要spring.jar spring-webmvc.jar 還有phprpc_spring.jar
     1建立web項目導入相關的包。
     2,配置web.xml 當然如果你以前在spring里配置過rmi,Hessian,httpinvoker,ws,你也許知道這一步如何配置:
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
       classpath:applicationContext-*.xml
      </param-value>
     </context-param>
      <listener>
      <listener-class>
       org.springframework.web.context.ContextLoaderListener
      </listener-class>
     </listener>
     <servlet>
        <servlet-name>remote</servlet-name>
           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
       <servlet-name>remote</servlet-name>
       <url-pattern>/remoteserver/*</url-pattern>
     </servlet-mapping>

    上文的接口和實現類不變,當然對list map都是支持的(測試通過) 這里只做了string
    在server端發布服務:
    當然是在web-inf 下面建立remote-servlet.xml
    內容:
    <bean name="phps" class="接口實現"/>
     <bean name="/phpremote" class="org.phprpc.spring.remoting.PHPRPC_Exporter">//當然可以看出 phprcp實現了spring 對remote的通用接口
      <property name="service" ref="phps"/>
      <property name="serviceInterface" value="接口"/>
     </bean>
    配置tomcat 啟動后服務就啟動了,
    3客戶端:客戶端使用java項目 當然也可以是web項目
    添加spring.jar  spring-webmvc.jar
    配置客戶端:
    <bean name="phprcp" class="org.phprpc.spring.remoting.PHPRPC_ProxyFactoryBean">
     <property name="serviceUrl" value="http://localhost:8080/sall/remoteserver/phpremote"/>
     <property name="serviceInterface" value="接口"/>
    </bean>

    將服務端的接口copy過來,保持包結構不變。
    測試:
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-bean.xml");
      Hello phpRcpI = (Hello) context.getBean("phprcp");
      System.out.println(phpRcpI.sayHi("this is from phpclient..."));


    如果對復雜類型 當然  implements Serializable是必須的,如同Hessian,
    phphrcp效率還是不錯的 ,內部序列化和反序列化機制有了優化,還是值得學習和應用的。

    評論

    # re: phprcp 以及和spring的集成  回復  更多評論   

    2010-01-28 14:27 by qvod

    很實用!
    主站蜘蛛池模板: 免费在线不卡视频| 大地资源二在线观看免费高清 | 亚洲成人在线免费观看| 亚洲av无码专区国产乱码在线观看 | 国产午夜免费福利红片| 国产成人亚洲综合在线| 免费很黄很色裸乳在线观看| 国产91成人精品亚洲精品| heyzo亚洲精品日韩| 久久www免费人成精品香蕉| 亚洲欧洲日产国码av系列天堂| 中出五十路免费视频| 亚洲AV永久精品爱情岛论坛| 99久久精品免费精品国产| 亚洲免费在线观看视频| 成人在线免费观看| 人妻无码中文字幕免费视频蜜桃| 亚洲高清偷拍一区二区三区 | 国产亚洲精品免费| 亚洲综合另类小说色区| 一级做a爰全过程免费视频| 亚洲国产精品综合久久久| 在线免费观看毛片网站| 一级毛片免费在线观看网站| 亚洲AV乱码久久精品蜜桃| 18勿入网站免费永久| 黄色网址免费在线| 久久国产亚洲观看| 成人看的午夜免费毛片| 乱人伦中文视频在线观看免费| 精品国产亚洲一区二区三区| 黄页网站在线看免费| 看免费毛片天天看| 亚洲综合精品香蕉久久网97| 色播在线永久免费视频| 国产免费爽爽视频在线观看| 99久久婷婷国产综合亚洲| 狠狠综合久久综合88亚洲| 日韩不卡免费视频| 拍拍拍无挡视频免费观看1000| 国产成人精品日本亚洲专一区|