我们正在使用C ++应用程序来发送和接收WebSocket消息
WinHttpWebSocketSend
)WinHttpWebSocketReceive
)但是这两个线程使用相同的WebSocket句柄。它会引起任何问题吗?我不知道我们是否必须以另一种方式处理它。它适用于我们的应用程序 - 我们能够发送和接收消息 - 但我不知道它是否会在生产环境中出现任何问题。任何人都有更好的想法?
答案 0 :(得分:1)
与大多数平台一样,几乎所有Windows API系统调用都不提供线程障碍,除了防止同时访问内核的关键部分。虽然我不能肯定地说(文档似乎没有回答你明确的问题)如果WinHTTP API提供了阻止多个线程相互踩踏的障碍(可以这么说),我会感到惊讶 - 特别是因为它实际上只是一个“助手”API直接使用较低级别的Winsock东西 - 我会自己去实现必要的障碍。
我也想知道为什么你以这种方式使用线程开始。我基本上对WinHTTP API一无所知,但我确实注意到WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS这让我相信你可以实现一种异步方法,它可以防止任何线程安全问题开始(并且可能更快,内存效率更高) )。
似乎WinHTTP的回调机制相当富有表现力。见WINHTTP_STATUS_CALLBACK。据推测,您可以简单地使用非阻塞操作,创建事件侦听器,并将连接句柄与dwContext
相关联。没有线程参与。