C++编写PB HTTP多层框架实现长连接与即时通知

1星 需积分: 3 27 下载量 6 浏览量 更新于2024-11-04 2 收藏 33.37MB RAR 举报
资源摘要信息: "PB HTTP服务端和多层框架是利用C++、IOCp、PBNI和zlib技术构建而成的高性能服务端平台。服务端使用C++语言开发,并采用了Windows平台特有的IOCP(IO完成端口)技术来处理并发连接。PBNI(PowerBuilder Native Interface)技术则允许服务端与PowerBuilder编写的应用程序进行交互。zlib是一个广泛使用的数据压缩库,用于优化网络传输过程中的数据压缩。 服务端支持PB长连接通信,提供了一个PB客户端demo,展示如何通过PB客户端调用服务端功能。此外,它还支持HTTP GET和POST请求调用,使得HTTP接口的实现变得简单易行。服务端的核心业务代码完全采用PowerBuilder编写。 服务端实现的功能主要包括以下几点: 1. PB客户端调用功能:该功能模拟了EAServer IIOP通信协议,并增加了服务端心跳检测、客户端自动重连等特性。相比于EAServer,本服务端提供了更高效的运行效率和更小的传输码流。通过PB客户端,前端界面可以避免卡顿问题,同时客户端在局域网系统中可以实现移动端的远程查询。 2. 客户端点对点消息传递:通过服务端转发,可以实现类似在线聊天的功能。服务端还支持HTTP POST请求的即时转发功能,PB客户端生成响应数据后返回给HTTP调用端。这种架构可以用来处理小数据量的远程查询,例如医生通过手机远程查询和修改门诊预约及患者资料。 3. 服务端即时通知功能:当服务端处理完成某个任务后,可以向在线的PB长连接客户端发送通知消息。这样,客户端接收到通知后可以立即做出响应操作,例如酒店系统前台开房后,可以即时刷新全系统房态;门诊系统前台挂号后,医生端可以即时看到患者信息。 整体而言,该服务端框架通过提供一种多层架构的解决方案,增强了网络应用的稳定性和响应速度,同时降低了数据传输的冗余,提高了通信效率。特别适合于需要高效率和稳定性后端服务支持的场景,如在线医疗服务、预订系统等。 压缩包文件列表包含了多个重要文件,其中: - demo***.bak:可能是一个备份文件,包含了项目的历史版本或配置信息。 - demo.pbw:可能是一个PowerBuilder工作区文件,用于存放PowerBuilder项目的源代码和相关资源。 - 框架说明.txt:包含了对服务端框架的详细介绍和使用说明,便于开发者理解和使用该框架。 - Json对象导入导出dw列名大小写转换及重命名.txt:提供了关于JSON对象导入导出,以及DataWindow列名大小写转换和重命名的相关方法和说明。 - Json取datastore的handle_PBVMxxxDLL修改方法.txt:可能涉及如何在PowerBuilder中处理JSON数据,并获取数据存储的句柄,并提供了修改PBVMxxxDLL的方法说明。 - Json对像在不同版本的pb切换.txt:说明了在不同版本的PowerBuilder之间切换时,如何处理JSON对象的兼容性问题。 - screenshot:包含了服务端或客户端运行时的截图,可用于界面设计或错误诊断。 - client:包含了客户端相关的文件,如编译后的客户端程序、配置文件等。 - server:包含了服务端相关的文件,如服务端程序、配置文件、日志文件等。 综合上述信息,PB HTTP服务端和多层框架是一个专为PowerBuilder应用程序设计的高性能、多协议通信框架,适合处理复杂的业务逻辑和实时数据通信需求。"
2009-05-10 上传
PB9以上的PB版本适用。 使用只有三个函数,很简单。 这是用PBNI编写的控件,VC6的IDE,VC2003的编译器编译,UNICODE版本。 三个函数的使用说明: of_addtip(unsignedlong winhandle, string tip) 添加一个tip。这是必须首先调用的函数,即:在使用其他两个函数前,必须先调用此函数。 winhandle:窗口句柄,操作tip的窗口的句柄,tip的图标即用此窗口的图标。 tip: tip的字符内容。 of_modifytip(string title, string info) 修改tip的内容,并且动态将修改的内容立即显示。参数的含义明显。 of_deletetip() 删除tip. 对tip图标上的鼠标操作的处理: 原理是:图标上的所有windows消息,都会转发到参数winhandle所代表的窗口,作为该窗口的WM_USER消息,即触发该窗口的pbm_custom01事件。pbm_custom01事件的lparm参数指定tip图标的windows消息号。 具体作法:在参数winhandle所代表的窗口的pbm_custom01事件中写代码,检测lparm的值,以判断鼠标进行了哪种操作,如:lparm为517(WM_RBUTTONUP),表示鼠标弹起。 pbm_custom01中的示例代码: //start CONSTANT long WM_MOUSEMOVE = 512 CONSTANT long WM_LBUTTONDOWN = 513 CONSTANT long WM_LBUTTONUP = 514 CONSTANT long WM_LBUTTONDBLCLK = 515 CONSTANT long WM_RBUTTONDOWN = 516 CONSTANT long WM_RBUTTONUP = 517 CONSTANT long WM_RBUTTONDBLCLK = 518 CONSTANT long WM_USER = 1024 CONSTANT long NIN_BALLOONSHOW =(WM_USER + 2) CONSTANT long NIN_BALLOONHIDE =(WM_USER + 3) CONSTANT long NIN_BALLOONTIMEOUT =(WM_USER + 4) CONSTANT long NIN_BALLOONUSERCLICK =(WM_USER + 5) m_base lm_menu CHOOSE CASE lparam CASE WM_MOUSEMOVE // CASE WM_LBUTTONDOWN //鼠标左键按下 CASE WM_LBUTTONUP //鼠标左键弹起 CASE WM_LBUTTONDBLCLK //鼠标左键双击 CASE WM_RBUTTONDOWN // SetFocus ( this ) lm_menu = CREATE m_base lm_menu.PopMenu(PointerX(),PointerY()) DESTROY lm_menu CASE WM_RBUTTONUP // CASE WM_RBUTTONDBLCLK // CASE NIN_BALLOONSHOW // CASE NIN_BALLOONHIDE // CASE NIN_BALLOONTIMEOUT // CASE NIN_BALLOONUSERCLICK // CASE ELSE Beep(0) END CHOOSE //end 注意事项: 经测试,本PBNI如果与其他非UNICODE版的PBNI同用时,会显示乱码。无解。 如有BUG,敬请及时告知。 本控件的讨论贴: http://topic.csdn.net/u/20090510/20/14a57e09-02ca-44df-8f9b-e3811678360d.html