QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列) - 花钱的年华 - BlogJava
来源:百度文库 编辑:神马文学网 时间:2024/04/29 17:45:36
QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列)
作者:江南白衣 虽然现在已是Web Server, Web Service的天下,但偶然还是会因为性能苛刻,或者需要自定义协议的原因,很无辜的要自己做一个Multi-Thread,Multi-Client的Tcp Server。
第一时间想起了那两卷UNP(《Unix Network Programing》),好在现在除了Ice的Java版,Netty2作者的后续之作Apache MINA,Crmky的Cindy之外,还有个超简单的QuickServer,让你专心编写自己的业务代码,不用编写一行Tcp代码。
本来还想花点时间在几种框架之间好好选型的,但就在一个无聊会议的间隙里,尝试着用QuickServer编写一点代码,结果才十几行代码就把任务完成了,还选什么型呢?因此,也把QuickServer作为这个Pragmatic系列的开端。
一开始吸引我的是QuickServer的Quick Start,编写hanlder类和xml配置文件后,用java -jar QuickServer.jar -load EchoServer.xml 启动就可以了。
XML配置文件:
EchoServer v 1.2
4123
0.0.0.0
org.springside.EchoCommandHandler
唯一需要的Hanlder类:
public class EchoCommandHandler implements ClientCommandHandler {
public void handleCommand(ClientHandler handler, String command) throws SocketTimeoutException, IOException {
if(command.toLowerCase().equals("quit")) {
handler.sendClientMsg("Bye ;-)");
handler.closeConnection();
} else {
handler.sendClientMsg("Echo : "+command);
}
}
}
代码里只有handleCommand(ClientHandler handler, String command)这个回调函数是必须的方法,参数String command 是从客户端传来的字串,你可以定义自己的指令协议,也有byte[]和Java Object的形式。参数clientHandler 可以对client作任何事情,比如sendClientMsg()发送String形式的回应,当然还可以发送byte[]和Java Object。
handleCommand() 将框架的理念发挥到极致,你完全不需要关心Tcp编程的底层,不需要API式的线性编程,只要实现并配置回调函数,用框架传来的command与handler干活就可以了,框架会完成前后一切的控制工作。
但这个例子太没营养了?在我的任务里,有Query:keyword, Detail:i 和 Bye三种指令,静态初始化Spring的ClasspathXmlApplicationContext,通过getBean("searchService")拿到搜索服务对象进行搜索,最后学WebService,用jdom简单的将搜索结果序列化成xml传给Delphi客户端解读。
另一个接口是EventHandler,可以对Client的gotConnected,closingConnection 等事件响应。
最后QuickServer提供了ChatServer、FTPServer等example;安全方面支持验证模式;性能方面Charlse说单机上两万人没问题....
就这么多了,毕竟一个短会间隙就完成的东西,能有多复杂呢?Pragmatic就是这样一个系列,介绍一些轻便的框架,大幅简化大家的编程,专心编写自己的业务代码,不需要知道太多的底层细节,也没有xml配置地狱。
作者:江南白衣 虽然现在已是Web Server, Web Service的天下,但偶然还是会因为性能苛刻,或者需要自定义协议的原因,很无辜的要自己做一个Multi-Thread,Multi-Client的Tcp Server。
第一时间想起了那两卷UNP(《Unix Network Programing》),好在现在除了Ice的Java版,Netty2作者的后续之作Apache MINA,Crmky的Cindy之外,还有个超简单的QuickServer,让你专心编写自己的业务代码,不用编写一行Tcp代码。
本来还想花点时间在几种框架之间好好选型的,但就在一个无聊会议的间隙里,尝试着用QuickServer编写一点代码,结果才十几行代码就把任务完成了,还选什么型呢?因此,也把QuickServer作为这个Pragmatic系列的开端。
一开始吸引我的是QuickServer的Quick Start,编写hanlder类和xml配置文件后,用java -jar QuickServer.jar -load EchoServer.xml 启动就可以了。
XML配置文件:
org.springside.EchoCommandHandler
唯一需要的Hanlder类:
public class EchoCommandHandler implements ClientCommandHandler {
public void handleCommand(ClientHandler handler, String command) throws SocketTimeoutException, IOException {
if(command.toLowerCase().equals("quit")) {
handler.sendClientMsg("Bye ;-)");
handler.closeConnection();
} else {
handler.sendClientMsg("Echo : "+command);
}
}
}
代码里只有handleCommand(ClientHandler handler, String command)这个回调函数是必须的方法,参数String command 是从客户端传来的字串,你可以定义自己的指令协议,也有byte[]和Java Object的形式。参数clientHandler 可以对client作任何事情,比如sendClientMsg()发送String形式的回应,当然还可以发送byte[]和Java Object。
handleCommand() 将框架的理念发挥到极致,你完全不需要关心Tcp编程的底层,不需要API式的线性编程,只要实现并配置回调函数,用框架传来的command与handler干活就可以了,框架会完成前后一切的控制工作。
但这个例子太没营养了?在我的任务里,有Query:keyword, Detail:i 和 Bye三种指令,静态初始化Spring的ClasspathXmlApplicationContext,通过getBean("searchService")拿到搜索服务对象进行搜索,最后学WebService,用jdom简单的将搜索结果序列化成xml传给Delphi客户端解读。
另一个接口是EventHandler,可以对Client的gotConnected,closingConnection 等事件响应。
最后QuickServer提供了ChatServer、FTPServer等example;安全方面支持验证模式;性能方面Charlse说单机上两万人没问题....
就这么多了,毕竟一个短会间隙就完成的东西,能有多复杂呢?Pragmatic就是这样一个系列,介绍一些轻便的框架,大幅简化大家的编程,专心编写自己的业务代码,不需要知道太多的底层细节,也没有xml配置地狱。
QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列) - 花钱的年华 - BlogJava
BlogJava - 花钱的年华 - Python+wxWidgets快速开发桌面小程序
我最喜欢和关心的开源项目 - 花钱的年华 - BlogJava
美研究发现可在吵闹环境下安然入睡的原因
SOA的开发环境搭建
Python开发环境的搭建
吵闹的青蛙
吵闹的青蛙
吵闹的价值
吵闹的价值
精彩的舞台就搭建在虚拟的空间里
精彩的舞台就搭建在虚拟的空间里
Ubuntu下Java环境的搭建
[OpenCV+C#]开发环境的搭建
只求在我最美的年华里,遇到你。
南方周末 - 在陌生的环境里生活
在Windows上搭建Android的JAVA开发环境图文教程(Eclipse版本)
在Windows上搭建Android的JAVA开发环境图文教程(Eclipse版本) | ...
在eclipse3.3上进行OSGI基础平台环境的搭建
架构师09年书单 - 花钱的年华 - CSDNBlog
架构师核心技能养成计划 - 花钱的年华 - CSDNBlog
似水年华里的那些忧伤
书页里流淌的似水年华
WPF入门一:搭建WPF的开发环境