MINA等异步单工长通讯问题

发布于 2021-12-01 17:53:08 字数 8298 浏览 959 评论 1

最近接了个项目,需要用异步单工长连接,同银联方进行交互,因为对方用的就是这实现,但是我们用的是mina同步短连接,这里我试了mina的异步长短通讯、socket的通讯、netty的通讯连接,都不完美,第一个,多几笔,提示hander未关闭,第二个发过去的数据对方不认识。第三个,发过去但收不到响应。。。。,用短连接发送再加一个client端口启动接收,能发能收,但并发量和接收数据处理这块也容易混乱!求大神指导下,或者给个这种类型的demo  灰常感谢!!!

demo:

    sendMsg(Object msg) throws CharacterCodingException, UnsupportedEncodingException{
        
        NioSocketConnector connector = new NioSocketConnector();
        //connector.getSessionConfig().setIdleTime(IdleStatus.WRITER_IDLE,10); //写 通道均在10 秒内无任何操作就进入空闲状态  
        //connector.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE,10); //读 通道均在10 秒内无任何操作就进入空闲状态  
        connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);   //读写 通道均在10 秒内无任何操作就进入空闲状态  
        connector.getSessionConfig().setWriteTimeout(3000);
        connector.getSessionConfig().setReadBufferSize(2048);
        connector.setConnectTimeoutMillis(4000);  
        connector.getFilterChain().addLast("codec",  CODEC_FILTER);
        connector.setHandler(new MinaClientHander() );
        
        ConnectFuture cf = connector.connect(new InetSocketAddress(IP,PORT));
        cf.join();
        // 等待连接成功
        cf.awaitUninterruptibly();
        IoSession session = cf.getSession();
        System.out.println("开始发消息【"+msg+"】去通道方!!!");
        
        if(msg.toString().length()>20){
             String msgStr = "";
             Charset charset =Charset.forName("ISO-8859-1");
             CharsetEncoder encoder = charset.newEncoder();
             if (msg instanceof byte[])
             {
                 msgStr = new String((byte[]) msg, "ISO-8859-1");
             } else
             {
                 msgStr = msg.toString();
             }
             String value;
             value =setMsgLength(msgStr);
             IoBuffer buf = IoBuffer.allocate(value.length())
                 .setAutoExpand(true);
             buf.putString(value, encoder);
             buf.flip();
             System.out.println("MsgHeadProcess   报文发送编码 【 " + new Date(System.currentTimeMillis())
               + "】  data【" +buf.getHexDump());
             session.write(buf);
             session.getCloseFuture().awaitUninterruptibly();// 等待连接断开  
             connector.dispose();
             session.close();
             try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else{
            session.write(msg);
            session.getCloseFuture().awaitUninterruptibly();// 等待连接断开  
            connector.dispose();
            session.close();
             
        }





    static{
        // 服务端的实例
                NioSocketAcceptor accept = new NioSocketAcceptor();
                // 添加filter
                accept.getFilterChain().addLast("codec",new ProtocolCodecFilter(
                        new MinaEncoder(),
                        new MinaDecoder()
                        ));
                // 添加filter,日志信息
            //    accept.getFilterChain().addLast("logging", new LoggingFilter());
                // 添加线程池
                accept.getFilterChain().addLast("ThreadPool", new ExecutorFilter(Executors.newCachedThreadPool()));
                accept.getSessionConfig().setReadBufferSize(2048);  
                accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
                
                // 设置服务端的handler
                accept.setHandler(new MinaServerHander());
                try {
                    int PORT=10006;
                    accept.bind(new InetSocketAddress(PORT));
                    log.info("服务端启动!端口:"+PORT);
                } catch (IOException e) {
                    log.error("socket listener start exception", e);
                }
                log.info("mina server started.");
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2021-12-06 12:45:53

大神们呢?能不能出来乐呵乐呵

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文