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??启动就可以了。
<
quickserver
>
???? < name > EchoServer?v?1.2 </ name > ???? < port > 4123 </ port > ???? < bind-address > 0.0.0.0 </ bind-address > ???? <!-- ?business?logic?classes? --> ???? < client-command-handler > ????????org.springside.EchoCommandHandler ???? </ client-command-handler >
</
quickserver
>
唯一需要的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。 ??? 另一个接口是EventHandler,可以对Client的gotConnected,closingConnection 等事件响应。 ????最后QuickServer提供了ChatServer、FTPServer等example;安全方面支持验证模式;性能方面Charlse说单机上两万人没问题.... ??? 就这么多了,毕竟一个短会间隙就完成的东西,能有多复杂呢?Pragmatic就是这样一个系列,介绍一些轻便的框架,大幅简化大家的编程,专心编写自己的业务代码,不需要知道太多的底层细节,也没有xml配置地狱。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |