WEB开发网
开发学院软件开发VC 论软件接口中几种底层通讯的实现 阅读

论软件接口中几种底层通讯的实现

 2010-02-19 20:32:58 来源:WEB开发网   
核心提示:2、中间件通讯目前中间平台也比较多,我所使用的中间件有BEA的Tuxedo和东方通的TongEasy,论软件接口中几种底层通讯的实现(2),TongEasy我就不说了,主要讨论一下Tuxedo,使用多线程方式会存在隐患,最好的方式是采用多进程,BEA Tuxedo系统提供九种通信模式:⑴.同步Request/Respo

2、中间件通讯

目前中间平台也比较多,我所使用的中间件有BEA的Tuxedo和东方通的TongEasy,TongEasy我就不说了,主要讨论一下Tuxedo。BEA Tuxedo系统提供九种通信模式:

⑴.同步Request/Response模式;

⑵.异步Request/Response模式;

⑶.嵌套调用;

⑷.调用转发;

⑸.会话通信;

⑹.主动消息通告;

⑺.基于事件的通信;

⑻.基于队列的通信;

⑼.使用事务。

同步请求/应答方式比较简单,因此在应用中也使用得相当多。但是同步请求/应答方式在服务端服务端反应比较慢时造成阻塞,如果使用了多线程方式,不管Tuxedo采用长连接还是短连接均容易造成线程挂起,不能再进行后续处理,很多情况需要程序重启。采用异步方式不会造成阻塞,但需要去查询是否有应答消息,下面的代码实现了使用异步函数实现同步调用的功能,增加了超时处理,这样不会导致程序阻塞:

int tpcallex(char *svc, char *idata, long ilen, char **odata, long *olen, long flags, long timeout)
{
  const int err_invoke_result = -1;
  int iHandler=0;
  int iResult=0;
  int iTimeOut=timeout;
  iHandler = tpacall((char *)svc, (char *)idata, ilen, (long)TPNOBLOCK);
  if(iHandler == err_invoke_result)
  {
    return iHandler;
  }
  while(iTimeOut>0)
  {
    iResult = tpgetrply(&iHandler, (char **)odata, olen, (long)TPNOBLOCK);
    if(iResult == err_invoke_result)
    {
      Sleep(10);
      iTimeOut -= 10;
      continue;
    }
    break;
  }
  if(iTimeOut<=0)
  {
    tpcancel(iHandler);
    return err_invoke_result;
  }
  return iHandler;
}

如果要增加接口的处理能力,使用多线程方式会存在隐患,最好的方式是采用多进程,不过存在如何消息均衡的问题。

Tags:软件 接口 底层

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接