快速业务通道

yanf4j引入了客户端非阻塞API - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

yanf4j引入了客户端非阻塞API

时间:2011-06-12 BlogJava dennis

yanf4j发布一个0.50-beta2版本,这个版本最重要的改进就是引入了客户端 连接非阻塞API,主要最近的工作要用到,所以添加了。两个核心类 TCPConnectorController和UDPConnectorController分别用于TCP和UDP的客户端 连接控制。例如,现在的UDP echo client可以写成:

//客户端echo handler
     class EchoClientHandler extends 

HandlerAdapter {
        public void onReceive(Session udpSession, 

Object t) {
            DatagramPacket datagramPacket = 

(DatagramPacket) t;
            System.out.println

("recv:" + new String(datagramPacket.getData

()));
        }
        @Override
        public void 

onMessageSent(Session session, Object t) {
            

System.out.println("send:" + new String((byte[]) 

t));
        }
    }
       //连接代码,并发送UDP包
       

 UDPConnectorController connector = new UDPConnectorController();
  

      connector.setSoTimeout(1000);
        connector.setHandler

(new EchoClientHandler());
        connector.connect(new 

InetSocketAddress(InetAddress.getByName(host),
                

port));
        for (int i = 0; i < 10000; i++) {
        

    String s = "hello " + i;
            

DatagramPacket packet = new DatagramPacket(s.getBytes(), s.length

());
            connector.send(packet);
        }

yanf4j引入了客户端非阻塞API(2)

时间:2011-06-12 BlogJava dennis

UDP不是面向连接的,因此connect方法仅仅是调用了底层 DatagramChannel.connect方法,用来限制接收和发送的packet的远程端点。

再来看看TCPConnectorController的使用,同样看Echo Client的实现:

//客户端的echo handler
class EchoHandler extends HandlerAdapter<String> {
        @Override
        public void onConnected(Session session) {
            try {
                //一连接就发送NUM个字符串
                for (int i = 0; i < NUM; i++)
                    session.send(generateString(i));
             } catch (Exception e) {
             }
        }
        public String generateString(int len) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < MESSAGE_LEN; i++)
                sb.append(i);
            return sb.toString();
        }
        @Override
        public void onReceive(Session session, String t) {
            //打印接收到字符串
            if (DEBUG)
                System.out.println("recv:" + t);
        }
    }
//...连接API,TCPConnectorController示例
    Configuration configuration = new Configuration();
        configuration.setTcpSessionReadBufferSize(256 * 1024); // 设置

读的缓冲区大小
    TCPConnectorController    connector = new TCPConnectorController

(configuration,
                new StringCodecFactory());
    connector.setHandler(new EchoHandler());
    connector.setCodecFactory(new StringCodecFactory());
    try {
            connector.Connect(new InetSocketAddress

("localhost", 8080));
    } catch (IOExceptione) {
            e.printStackT

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号