zoukankan      html  css  js  c++  java
  • 可靠的双向管道和不可靠的双向管道

    在《JXTA JavaTM Standard Edition v2.5: Programmers Guide》的第17页中,介绍了JxtaSocket和JxtaBiDiPipe;根据该介绍,这两种通信机制都提供双向可靠的通信信道。

    但有时可能处于性能的考虑,我们希望使用类似UDP那种方式,而又不想使用低级管道(需要手工实现双向通信):

    这时可以仍然使用JxtaBiDiPipe,并调用其setReliable(false),将其 可靠性参数设置为false。

    一个使用场景就是通过RTP协议传输音频/视频(在自定义的传输层使用JXSE)。

    RTP协议本身是不可靠的,那么如果将RTP建立在可靠性协议(例如TCP)之上,会不会对性能有影响?

     不知到上面的分析是否正确?

    ————————————————————————————————————————————————————————————————

    查看JxtaBiDiPipe的源代码,将isReliable标志设置为true,确实多做了额外的工作

        /**
         * If {
    @code true} then we are using the underlying end-to-end ACK reliable
         * layer to ensure that messages are received by the remote peer.
         
    */
        protected volatile boolean isReliable = false;
        protected volatile ReliableInputStream ris = null;
        protected volatile ReliableOutputStream ros = null;


        /**
         * creates all the reliability objects
         
    */
        private void createRLib() {
            if (isReliable) {
                if (outgoing == null) {
                    outgoing = new OutgoingMsgrAdaptor(msgr, retryTimeout);
                }
                if (ros == null) {
                    ros = new ReliableOutputStream(group, outgoing, new FixedFlowControl(windowSize), group.getTaskManager().getScheduledExecutorService());
                }
                if (ris == null) {
                    ris = new ReliableInputStream(group, outgoing, retryTimeout, this);
                }
            }
        }
  • 相关阅读:
    Python logging模块异步线程写日志实现过程解析
    Python数据分析实战项目介绍
    Pytorch 卷积中的 Input Shape用法
    Python 找出出现次数超过数组长度一半的元素实例
    Linux系统如何安装Python?新手教程
    MySQL 日志 复制数据库 InnoDB表空间模式 mysql默认数据库
    MySQL 8.0 窗口函数 排名、topN问题
    MySQL 求中位数 两个案例
    MySQL 创建表 复制表结构的两种方法 插入相同数据 重命名表 排查并修改字符集
    mysql if 和 case
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2213859.html
Copyright © 2011-2022 走看看