HPsocket

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 111|回复: 1

常见疑问

[复制链接]
发表于 2022-3-22 20:01:16 | 显示全部楼层 |阅读模式
⚫ Q-02:可以在事件处理函数中调用 Start() / Stop() 吗?
➢ A:不可以。由于监听器事件(OnReceive / OnClose 等)通常都在通信线程中被触
发,Stop() 方法需要等待通信线程结束,这样会导致自己等等自己结束的死循环,
因此不能在监听器事件处理代码中调用 Start() / Stop() 控制方法。
⚫ Q-03:关闭 Server 或 Agent 时,一直卡在 Stop()方法里面,Why?
➢ A:几种可能:
1) 在事件处理函数中调用 Stop() 方法(参考:Q-02)。
2) 一个或多个通信线程都被死锁了,导致 Stop() 方法一直等不到所有通信
线程结束。如果是所有通信线程都被死锁还会伴随另一种现象:组件不能
接收和处理任何通信请求。
3) 在自定义 Windows DLL 中使用 HP-Socket Server 组件,但在卸载该 DLL
之前没有手工关闭该 Server 组件,导致 Server 组件在自动析构时卡在 Stop()
方法中。解决方法:卸载 DLL 之前显式关闭 HP-Socket Server 组件。
4) 如果有些机器能顺利执行 Stop() 方法有些机器不能,可能是 Winsock 协
议栈被破坏了。解决方法:以管理员身份在命令行工具中执行:“netsh
winsock reset”,重启机器。
⚫ Q-04:可以在事件处理函数中更新用户界面吗?
➢ A:不可以。事件处理函数由 Socket IO 线程触发,如果在事件处理函数中更新用户
界面会急剧降低应用程序性能并且很容易造成死锁,应该使用其他方法异步更新用
户界面。
⚫ Q-05:如何断开超长连接?
➢ A:所谓超长连接是指连接时长超过正常时长的连接。Server 和 Agent 组件提供
DisconnectLongConnections() 方法断开所有超长连接,也提供 GetConnectPeriod()
方法用来获取某个连接的时长。
⚫ Q-06:如何断开静默连接?
➢ A:所谓静默连接是长时间没有数据交互的指连接。Server 和 Agent 组件提供
DisconnectSilenceConnections() 方法断开所有静默连接,也提供 GetSilencePeriod(
发表于 2022-6-6 18:28:45 | 显示全部楼层
蹭积分!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2022-11-26 16:57 , Processed in 0.173175 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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