【发布时间】:2019-02-27 01:23:29
【问题描述】:
WinHttpSendRequest 有一个 dwContext 参数,以便我可以从 WINHTTP_STATUS_CALLBACK 函数中读取上下文。这个上下文可以判断哪个 WinHttpSendRequest 用于当前回调。
不幸且奇怪的是,WinHttpWebSocketSend 根本没有这样的上下文参数。因此,无法在 WINHTTP_STATUS_CALLBACK 函数中区分多个 WinHttpWebSocketSend 调用。
有人可以帮我解决这个问题吗?
供您参考,我正在尝试修改以下示例以使用 websocket。
https://msdn.microsoft.com/en-us/library/aa383138%28VS.85%29.aspx#additional
我想要获取的 websocket 资源是:https://api.upbit.com/websocket/v1。 连接后,您可以发送以下资源字符串进行测试:
[{"ticket":"test"},{"format":"SIMPLE"},{"type":"trade","codes":["KRW-BTC","BTC-BCH"] },{"格式":"简单"}]
如果一切顺利,您将收到:
{"mk":"KRW-BTC","tms":1523531768829,"td":"2018-04-12","ttm":"11:16:03","ttms":1523531763000, "tp":7691000.0,"tv":0.00996719,"ab":"BID","pcp":7429000.00000000,"c":"RISE","cp":262000.00000000,"sid":1523531768829000,"st": “快照”} {"mk":"BTC-BCH","tms":1523531745481,"td":"2018-04-12","ttm":"11:15:48","ttms":1523531748370,"tp" :0.09601999,"tv":0.18711789,"ab":"BID","pcp":0.09618000,"c":"FALL","cp":0.00016001,"sid":15235317454810000,"st":"SNAPSHOT" } {"mk":"KRW-BTC","tms":1523531769250,"td":"2018-04-12","ttm":"11:16:04","ttms":1523531764000,"tp" :7691000.0,"tv":0.07580113,"ab":"BID","pcp":7429000.00000000,"c":"RISE","cp":262000.00000000,"sid":1523531769250000,"st":"REALTIME" }
我有一个可以下载的源项目文件: https://1drv.ms/u/s!AiVorOunaPYdhAuHrggDk2EYa2X7
下载后,编译并运行它。然后你会看到一个带有“下载”按钮的对话框,它会显示 - http://www.microsoft.com - WebSocket 复选框已禁用
单击“下载”按钮将显示异步 WinHttpSendRequest 与http://www.microsoft.com 等一般站点一起工作。
我想为 websocket 服务器 (https://api.upbit.com/websocket/v1) 修改这个演示程序。为此,我'#define'd WSS_API_UPBIT 接下来,取消注释 AsynchDemo.cpp 的第 19 行到
定义 WSS_API_UPBIT
然后再次运行演示。这次你会看到一个有点不同的对话框 - https://api.upbit.com/websocket/v1 - 启用 WebSocket 复选框
现在,检查 Websocket 框并按下载。 由于回调中没有上下文,它将崩溃。
谢谢
【问题讨论】:
标签: asynchronous websocket callback winhttp