软件包 org.jboss.netty.channel.socket.http

一个基于HTTP客户端的SocketChannel和它相应的服务端Servlet实现让你的服务器应用程序可以工作在防火墙网络里.

请参见:
          描述


类摘要
HttpTunnelingClientSocketChannelFactory 创建一个SocketChannel用于连接一个与HttpTunnelingServlet通信的服务应用.请参考包的概要了解更多用法.
HttpTunnelingServlet 一个代理一个传入数据到真实服务器的HttpServlet,反之亦然.请参考包的概要了解更多用法.
HttpTunnelingSocketChannelConfig 一个客户端HTTP渠道SocketChannelChannelConfig.一个使用 HttpTunnelingClientSocketChannelFactory创建的SocketChannel使用 SocketChannel.getConfig()返回该配置类型的实例.
 

软件包 org.jboss.netty.channel.socket.http 的描述

一个基于HTTP客户端的SocketChannel和它相应的服务端Servlet实现让你的服务器应用程序可以工作在防火墙网络里.

部署HTTP隧道作为一个Servlet

首先,HttpTunnelingServlet必须在web.xml配置.
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">

   <servlet>
     <servlet-name>NettyTunnelingServlet</servlet-name>
     <servlet-class>org.jboss.netty.channel.socket.http.HttpTunnelingServlet</servlet-class>
     <!--
       通道名称,这个应该是一个已注册的本地通道.
       查看LocalTransportRegister.
     -->
     <init-param>
       <param-name>endpoint</param-name>
       <param-value>local:myLocalServer</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
     <servlet-name>NettyTunnelingServlet</servlet-name>
     <url-pattern>/netty-tunnel</url-pattern>
   </servlet-mapping>
 </web-app>
 
然后,你必须在相同的Servlet上下文绑定你的基于Netty的服务器应用程序或者使用本地传输共享类加载空间 (查看LocalServerChannelFactory.) 你可以使用你最喜欢的IoC框架如JBoss微容器、Guice和Spring完成绑定.以下例子显示如何在JBossAS 5里绑定一个echo 服务到上面(web.xml)指定的终端:
 <bean name="my-local-echo-server"
       class="org.jboss.netty.example.http.tunnel.LocalEchoServerRegistration" />

 ...

 package org.jboss.netty.example.http.tunnel;
 ...

 public class LocalEchoServerRegistration {

     private final ChannelFactory factory = new DefaultLocalServerChannelFactory();
     private volatile Channel serverChannel;

     public void start() {
         ServerBootstrap serverBootstrap = new ServerBootstrap(factory);
         EchoHandler handler = new EchoHandler();
         serverBootstrap.getPipeline().addLast("handler", handler);

         // 注意"myLocalServer" 是在web.xml里被指定的终端.
         serverChannel = serverBootstrap.bind(new LocalAddress("myLocalServer"));
     }

     public void stop() {
         serverChannel.close();
     }
 }
 

连接一个HTTP隧道

一旦隧道被配置,你客户端应用程序需要一对变更先.
 ClientBootstrap b = new ClientBootstrap(
         new HttpTunnelingClientSocketChannelFactory(
                 new NioClientSocketChannelFactory(...)));

 // Configure the pipeline (or pipeline factory) here.
 ...

 // HTTP服务器的主机名
 b.setOption("serverName", "example.com");
 // 在web.xml里指定的HTTP隧道Servlet的路径
 b.setOption("serverPath", "contextPath/netty-tunnel");
 b.connect(new InetSocketAddress("example.com", 80);
 
了解更多配置信息如HTTPS属性,参考HttpTunnelingSocketChannelConfig.