FDEP 消息传输系统 FDEAPI 开发中需要注意的问题

FDEAPI开发中需要注意的问题(2021 年 8 月)

1、为什么需要使用长连接?

答:用户在使用 FDEAPI 的过程中,正确的用法是应当使用长连接。即一般只在程序的初始化部分调用 MrInit 函数(建立连接),然后进行正常的收发包的操作,在程序退出时调用 MrDestroy。而不是每次来一个请求都调用 MrInit 连接一次,处理完成后释放。

2、关于CorrPkgID的使用约定是什么?

答:如果用户调用 MrSend 函数发送的是业务应答包,对于 STUMsgProperty 参数中的 m_szCorrPkgID 字段,统一约定填写为与对应请求包中的 m_szPkgID 字段中相同的值,以方便请求方接收到应答包后,根据该字段查找对应的请求包。对于业务请求包或者其它类型的包,该字段填写为空(即’\0’)。
       接收时,如果 STUMsgProperty 中的 m_szCorrPkgID 字段的值为空,则表示是一个请求包;否则表示为一个应答包。

3、如果是同步处理,则当发出请求后,为什么需要循环等待接收?

       如果用户对于发往 FDEP 平台的包使用的是同步接收方式,即通过 MrSend发送到 FDEP 平台后,然后等着接收应答的方式。对于这种处理方式,在开发时需要注意,发送完成后,如果立即接收,基本上可以肯定第一次是接收不到应答包的,因为应答包不可能象在本机运行一样这么快的速度就可以回来,必须等待一定时间才可以收到。其伪代码如下:

4、app1 和app2 的约定是什么?

答:一般来说,用户接收请求的 appID 约定为 app1。自己使用任意一个 appID 发送请求包到对方的 app1,对方的 app1 收到请求后,进行处理,处理完成后,根据请求方的源 UserID 和 appID,将应答发回给请求方。

5、API是线程安全的,但不是进程安全的,为什么?

答:API 是线程安全的,但不是进程安全的。通过调用 MrInit 一旦创建了句柄,该句柄在调用 MrDestroy 之前不会再改变。同一个句柄可以在同一个进程内的多个不同线程间使用,但不能在不同进程间使用,例如在 Unix 下 fork 之后,在主进程中创建的句柄不能再使用。
2021-08-25
0 0