- 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
您可能关注的文档
最近下载
- 员工培训需求调查问卷.docx VIP
- “双碳“背景下新能源汽车保险所面临的机遇与挑战.docx VIP
- 计算机网络谢希仁第八版课后答案.docx VIP
- 2025年项目管理专业规划沟通管理与沟通模型专题试卷及解析.pdf VIP
- 统编版语文一年级下册生字练字帖(写字表)_PDF.pdf VIP
- 混凝土浇筑施工重点难点及处理措施.docx VIP
- 危化品安全知识考试复习题库(600题).docx VIP
- (2026春新版)教科版二年级科学下册《1.2挖掘恐龙“化石” 》PPT课件.pptx VIP
- 培训进度保障措施.docx VIP
- (2026春新版)教科版二年级科学下册《1.1 恐龙的故事》PPT课件.pptx VIP
原创力文档

文档评论(0)