HPsocket

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 163|回复: 0

绑定连接

[复制链接]
发表于 2022-3-2 19:06:48 | 显示全部楼层 |阅读模式
对于 IClient 系列组件,一个组件对象对应一个 Connection ID 和一个通信连接,因此很
容易把通信连接与应用层数据关联起来。应用程序与组件交互时,直接通知组件处理数据即
可(如:Send( pData, iLength))。如图 2.1.5-1 所示:
绑定连接;admin;40
注意:对于 IClient 组件,可以通过 SetExtra() / GetExtra() 方法绑定、获取附加数据。
对于 IServer 和 IAgent 系列组件,一个组件对象管理多个通信连接,HP-Socket 把通信
连接抽象为 Connection ID,应用程序与组件交互时,需要指定 Connection ID 来告知组件处
理哪个连接(如:Send(dwConnID, pData, iLength) )。如图 2.1.5-2 示:
绑定连接;admin;40
应用程序为了建立 Connection ID 与应用层数据的对应关系通常需要维护一张映射表
(如:map<CONNID, TMyAppData*>),从而不但增加了应用程序的负担;另外,由于运行
在多线程环境下,对映射表的读写操作需要进行同步处理,从而降低了应用程序的并发性能。
HP-Socket 为 IServer 和 IAgent 系列组件提供以下方法组绑定 Connection ID 和应用层数
据,尽量避免让应用程序维护映射表。
⚫ BOOL SetConnectionExtra(CONNID dwConnID, PVOID pExtra)
⚫ BOOL GetConnectionExtra(CONNID dwConnID, PVOID* ppExtra)
通常的应用情景如下:
1) 在 OnAccept() / OnConnect() 事件中调用 SetConnectionExtra(dwConnID, pExtra)
把 Connection ID 和应用层数据进行绑定。
2) 在 OnReceive() / OnSend() 事件中调用 GetConnectionExtra(dwConnID, ppExtra)
取出与 Connection ID 绑定的应用层数据,执行相应业务逻辑处理。
3) 在 OnClose() 事件中取消 Connection ID 和应用层数据的绑定,清除应用层数据
并释放资源。
注意:由于 HP-Socket 已经确保了 OnReceive() / OnClose() 等事件的线程安全,因此应
用程序可以放心使用连接绑定机制,不用担心同步问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|HPsocket-国产高性能通讯框架 ( 豫ICP备19038015号-1 )|网站地图 *//

GMT+8, 2022-12-1 02:17 , Processed in 0.157155 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表