yanf4j发布一个0.50-beta2版本,这个版本最重要的改进就是引入了客户端连接非阻塞API,主要最近的工作要用到,所以添加了。两个核心类TCPConnectorController和UDPConnectorController分别用于TCP和UDP的客户端连接控制。例如,现在的UDP echo client可以写成:
//客户端echo handler
classEchoClientHandlerextendsHandlerAdapter{
publicvoidonReceive(SessionudpSession,Objectt){
DatagramPacketdatagramPacket=(DatagramPacket)t;
System.out.println("recv:"+newString(datagramPacket.getData()));
}
@Override
publicvoidonMessageSent(Sessionsession,Objectt){
System.out.println("send:"+newString((byte[])t));
}
}
//连接代码,并发送UDP包
UDPConnectorControllerconnector=newUDPConnectorController();
connector.setSoTimeout(1000);
connector.setHandler(newEchoClientHandler());
connector.connect(newInetSocketAddress(InetAddress.getByName(host),
port));
for(inti=0;i<10000;i++){
Strings="hello"+i;
DatagramPacketpacket=newDatagramPacket(s.getBytes(),s.length());
connector.send(packet);
}
UDP不是面向连接的,因此connect方法仅仅是调用了底层DatagramChannel.connect方法,用来限制接收和发送的packet的远程端点。
再来看看TCPConnectorController的使用,同样看Echo Client的实现:
//客户端的echohandler
classEchoHandlerextendsHandlerAdapter<String>{
@Override
publicvoidonConnected(Sessionsession){
try{
//一连接就发送NUM个字符串
for(inti=0;i<NUM;i++)
session.send(generateString(i));
}catch(Exceptione){
}
}
责任编辑:小草