有时候,我们多个WEB应用服务需要通讯,如果采用socket方式进行通信,我们自己socket server 不能利用WebService容器已有的功能,比如线程管理等。如果采用SOAP方式进行通讯,需要Server端要能够访问到Client端得WebService,如果Client在内网,这往往会比较麻烦。
BiHttp是为了解决这个问题而写的一个通讯包,基于HTTP pull技术实现。Server端可以是任意的Java WebService,Client端可以是WebService,也可以是JAVA Application。
BiHttp(Beta)实现了
1)客户端向服务器端发送同步请求/异步请求
2)服务器端向客户端发送同步请求/异步请求
3)多客户端支持(设定不同的客户端ID)
4)客户端掉线检测
5)客户端掉线重连
Server端配置web.XML
<servlet> <servlet-name>BiHttpServlet</servlet-name> <servlet-class>com.msbai.net.http.BiHttp.server.BiHttpServlet</servlet-class> <init-param> <param-name>listener</param-name> <param-value>com.msbai.net.http.BiHttp.listener.BaseServerListener</param-value> <!-- 事件监听类,必须是BaseServerListener或者其子类--> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>BiHttpServlet</servlet-name> <url-pattern>/BiHttpServlet</url-pattern> </servlet-mapping>
Server端主要代码:
BiHttpServer server = BiHttpServer.getInstance();
try {
int packetId = server.SendMsgReqAsync(regId, msg);//发送异步请求
String response = server.SendMsgReqSync(regId, msg);//发送同步请求
server.SendMsgResAsync(regId, msg, msgId);//发送异步响应
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ;
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Client端主要代码:
BiHttpClient client = new BiHttpClient(
serverurl,new BaseClientListener() ,"id","validateMsg");
try {
client.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ServerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
System.out.println(client.SendMsgReqAsync("MsgReqAsync"));//发送异步请求
System.out.println(client.SendMsgReqSync("MsgReqSync"));//发送同步请求
client.SendMsgResAsync("MsgResAsync", "1");//发送异步响应
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ServerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}