我正在Q中构建一个websocket客户端,目的是连接到加密货币交易所,接收json中的公共市场数据提要,以便解析为kdb。在这一点上,使用这是KX官方知识库的指南,我已经设法创建了一个持久的websocket连接,从我的Q进程到Kraken交换,通过成功的连接/升级响应验证了stunnel。我的Q脚本只是定义了.z.ws来显示传入的消息,然后连接到我的本地端口运行特技。
.z.ws:{0N!.j.k(x);}
h:(`:ws://127.0.0.1:5103)"GET / HTTP/1.1\r\nHost: ws.kraken.com\r\n\r\n" 我的特技配置如下:
海怪
客户=是
sni = ws.kraken.com
接受= 127.0.0.1:5103
连接= 104.16.212.191:443
这一切似乎都有效,因为正如前面提到的,我的Q进程收到了以下成功的系统状态确认。
`connectionID`event`status`version!(9.223372e+18;"systemStatus";"online";"1.7.2")指南说,“如果成功,它将返回一个2项列表(句柄;HTTP响应)”,我也收到了。它们看起来是这样的:
(6i ;"HTTP/1.1 101 Switching Protocols\r\nDate: Mon, 08 Feb 2021 22:52:53 GMT\r\nConnection: upgrade\r\nSet-Cookie: __cfduid=d8179f7ef5db4e4e7a164dd75a492c2141612824773; expires=Wed, 10-Mar-21 22:52:53 GMT; path=/; domain=.kraken.com;HttpOnly; SameSite=Lax\r\nUpgrade: websocket\r\nSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=\r\nuWebSockets:17\r\nCF-Cache-Status: DYNAMIC\r\ncf-request-id: 082..)我真的认为这将是困难的部分,我感到有些骄傲,到目前为止,但现在我发现自己再次陷入困境。
我现在如何与websocket交互?我想发送更多的信息。订阅/取消订阅特定端点?
上面引用的指南非常清楚地说明了“发送信息,使用
q)neg[handle]"text" / a char vector"但每当我尝试
q)neg[6i].j.j(`ping)我得到以下错误
'Cannot write to handle 6. OS reports: Bad file descriptor 我怀疑我可能需要在最初的GET请求中以某种方式订阅某些端点,但在连接到websocket之后,我仍然希望能够自由地从不同的端点订阅和取消订阅。
谢谢你的阅读,任何见解都是非常感谢的。这是我第一次在堆栈溢出上发帖。
向你问好,罗斯
发布于 2021-02-10 18:39:28
该错误可能与您的邮件被拒绝有关。我快速地看了一下python示例,它看起来像这样期望json:
{"event": "ping"}
So you'd need to send something like this:
q).j.j(1#`event)!1#`ping
"{\"event\":\"ping\"}"Aqua为其TorQ kdb框架提供了一个Crypto外接程序,它可能很有用:
https://www.aquaq.co.uk/q/torq-crypto-released/
https://github.com/AquaQAnalytics/TorQ-Crypto
(免责声明,我为Aqua Q工作)
https://stackoverflow.com/questions/66110816
复制相似问题