软件系统之间的接口方式.pdfVIP

  • 12
  • 0
  • 约9.63千字
  • 约 11页
  • 2020-09-13 发布于天津
  • 举报
软件系统之间的接口方式 ? 概述 软件接口是实现一个系统跟另外系统进行信息交互的桥梁,在不同的系统之间, 根据系统的关联程度的不同存在紧耦合和松耦合两种:紧耦合要求接口响应反应快, 消息不能阻塞;松耦合对响应反应要求比较低。在目前应用中, Socket 、消息队列 (MessageQueue)、 WebService 等都有相应的应用,但是应用中发现各通讯方式有 自己固有的特征, “适合的才是最好的”,这是真理。 在接口和系统信息交互的过程中,两种模式使用得很普遍:同步调用和异步调用, 同步调用要求接口发出请求消息后必须等待服务端系统的应答消息,接口阻塞直至超 时;异步调用则发出请求消息后,接口可以从事其它处理,定时轮询服务端应答消息 和消息或事件通知。同步方式简单,但是很容易造成接口阻塞,造成消息积压超时。 ? 技术实现 ? Socket 通讯 Socket 通讯相对来说是很古老的通讯方式,也是最常用的通讯方式。 Socket 通 讯有阻塞和非阻塞两种方式。在同步方式,采用阻塞编程比较简单,但是为了防止接 口阻塞,我们需要设置 Socket 超时,因此可以使用 Socket 的 SELECT模型(参考 如下示例代码): ReceLen=0; CurReceLen=0; for(;;) { iResult=select(0,fdread,NULL,NULL,timeout); 精选文库 if(iResult==0) { AfxMessageBox(接收应答消息超时!!!,MB_OK|MB_ICONERROR); closesocket(Socket); return FALSE; } CurReceLen = recv(Socket, oBuf+ReceLen, len, NO_FLAG_SET); if((CurReceLen0) (CurReceLen != SOCKET_ERROR)) { oBuf[ReceLen+CurReceLen]=\0; memcpy((char *)MsgLen,oBuf,sizeof(WORD32)); MsgLen=ntohl(MsgLen); if(ReceLen+CurReceLen==MsgLen) { ReceLen+=CurReceLen; break; } ReceLen+=CurReceLen; } -- 2 精选文库 } 在异步方式下,采用非阻塞方式实现比较方便,在非阻塞方式下可使用 WSAAsyncSelect模型和 WSAEventSelect模型: WSAAsyncSelect模型基于消息, WSAEventSelect模型基于事件,下面的示例代码设置了 Socket 进行读写和关闭操作 的消息: status = WSAAsyncSelect(TempSocket,hWnd,WSA_READ,FD_READ| FD_CLOSE| FD_WRITE); if (status == SOCKET_ERROR) { WriteLogFile(Set stream socket module fail!!!IP(%s),Port(%d) and error(%d),GetIPAddr((PeerMap+node)-IPAddr),(Pee

文档评论(0)

1亿VIP精品文档

相关文档