常见疑问
⚫ 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(
蹭积分!
页:
[1]