【问题标题】:Asynchronous WebSockets in Winhttp Windows 8Winhttp Windows 8 中的异步 WebSockets
【发布时间】:2015-04-23 16:47:27
【问题描述】:

我只想将 WebSockets 添加到我在异步模式下使用 WinHTTP 的应用程序中。

当我需要 WebSocket 时,我会调用以下代码。

  1. 发送请求前:

    WinHttpSetOption(context->hRequest, WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET, NULL, 0);
    
  2. WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE:

    appContext->pIoRequest->hWebSocketHandle = WinHttpWebSocketCompleteUpgrade(appContext->hRequest, NULL);
    WinHttpWebSocketReceive(appContext->pIoRequest->hWebSocketHandle, appContext->pszOutBuffer,RESPONSE_BUFFER_SIZE, NULL, NULL);
    

一切都没有错误。

现在我在 Fiddler 中看到服务器向我的 WebSocket 发送了一些数据,但没有触发 WINHTTP_CALLBACK_STATUS_READ_COMPLETE

有什么想法吗?如何从我的 WebSocket 异步读取?向 WebSocket 发送数据效果很好。

【问题讨论】:

    标签: asynchronous websocket winhttp


    【解决方案1】:

    天哪!我发现了它的工作原理!

    1. 您必须调用额外的WinHttpSetStatusCallback 来为WinHttpWebSocketCompleteUpgrade 返回的WebSocketHandle 设置WebSocket 回调,并且此回调必须不同于调用WinHttpWebSocketCompleteUpgrade 的回调!
    2. 不可能通过WinHttpSetOptionWINHTTP_OPTION_CONTEXT_VALUE 标志设置上下文指针!它不起作用。 dwContextWebSocketCallback 中有错误的数据。在WebSocketCallback 中调用WinHttpQueryOption 返回错误的上下文数据。我认为这是 Windows 8.1 中的一个 BUG。我编写自己的处理程序来将我的上下文与WebSocketHandle 连接起来。

    所有这些都没有记录在 MSDN 中!最重要的是,我没有在谷歌上搜索任何有关异步 winhttp websocket 使用的信息...所以,我是第一个=) 如果我的研究对您有所帮助,我将非常高兴!

    【讨论】:

    • 你有工作代码的样本吗?我遇到了类似的问题,找不到异步 WinHTTP WebSockets 的引用。
    【解决方案2】:

    似乎 websockets 没有将 PING 和 PONG 消息发送到回调!

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 2015-05-03
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多