zoukankan      html  css  js  c++  java
  • SOAP报文下发

    1. 单独建立线程池,线程池中的所有工作线程从线程池任务队列中读取任务,启动SOAP报文下发工作。

    2. 建立连接池,线程池中线程从连接池获取一个连接将SOAP报文下发到网元上。

    3. 其他线程:SOAP报文读取线程,将生成的SOAP报文文件映射到内存文件,每次读取1w条数据到SOAP报文下发队列,SOAP下发队列数据结构进行
                                   封装,添加信号量,每次数据push_back一条信号量递增

                 SOAP报文下发线程,独立的线程从SOAP报文下发队列中取数据,等待下发队列的信号,如果有信号则从队列中取数据,构建下发任务
                                   将下发任务压入线程池工作任务队列,同时信号量递减1

                 SOAP报文保存线程,SOAP报文下发后会收到网元的响应报文,解析模块分析响应报文,获取SOAP发送报文的执行结果,并将执行失败
                                   的SOAP报文进行保存,对执行成功的报文写入日志。

    4. 连接池:连接池工厂,连接池,连接器实体

               连接池工厂建立连接池名称和连接池实例的映射,管理所有连接池。

               连接池管理所有会话连接(IOSession),建立空闲会话队列和使用会话队列,如果空闲队列为空,同时又有新的连接请求,则建立一条新的连接。

               连接数不能超过最大连接数,如果已经达到最大连接数,则进入等待状态,当空闲队列空状态取消

    AttachHttpHeader()  // 附加Http报头
    DetachHttpHeader()  // 获取Http响应报头
    PraseHttpHeader();  // 解析Http响应报头


    http://www.cnpaf.net/Class/HTTP/200707/20984_2.html


    队列采用状态模式,空闲状态
    队列包含一个事件,类型转换操作符到事件句柄,当空闲队列为空时,事件变为无信号状态,当变为非空时变为有信号状态。每次出现这种状况都要写日志信息。

    加锁时要用自动锁,将锁包装在一个局部变量中,防止死锁的发生。

    CMultiLock包装多个同步对象

    CSingleLock包装单个同步对象

    CSingleLock singleLock(&m_CritSection); // 包装一个临界区
    singleLock.Lock();  // 尝试给共享资源加锁
    if (singleLock.IsLocked())  // 判断共享资源是否被锁住
    {
    // 开始使用共享资源
    // 使用结束,释放共享资源使用权
    singleLock.Unlock();
    }

  • 相关阅读:
    asp.net 页面定时跳转的小技巧
    获得 Windows phone 设备的信息
    如何自定义ToggleSwitch控件样式(转)
    云推送注意(MSDN链接)
    回顾:线程和进程的区别
    WebGL
    13种提升基于MVVM模式的WP7程序性能的方法(转)
    sample_code
    网址收藏
    Net中de日期格式
  • 原文地址:https://www.cnblogs.com/csuchao/p/2073239.html
Copyright © 2011-2022 走看看