最近,我一直在尝试将数据从KDB流式传输到python。我现在正在使用websocket,并且已经浏览了文档https://code.kx.com/q/wp/kdb_and_websockets.pdf
在python方面,我一直在尝试ws4py、autobahn和websocket客户端。
所有这些都做得很好,本质上我的问题在于发送到服务器以订阅提要的消息的格式。
一个小的(开源(例子:
class DummyClient(WebSocketClient):
def opened(self):
self.send(*what should I put here?*, binary=True)
def closed(self, code, reason=None):
print("Closed down", code, reason)
def received_message(self, m):
# not yet implemented
if __name__ == '__main__':
try:
ws = DummyClient('ws://host:port/', protocols=['http-only', 'chat'])
ws.connect()
ws.run_forever()
except KeyboardInterrupt:
ws.close()
打开时,我应该通过调用服务器函数loadPage来订阅提要。当对包含函数名和参数的列表进行编码时,我尝试了不同的方法,但都没有成功。
我尝试过的:
np.array("['loadPage',[]]"(.tobytes((
"['loadPage',[]]".encode('utf8'(
json格式化
十六进制格式化
任何帮助都将不胜感激!
最佳,Yael
我认为在这种情况下,您需要做的是在您的kdb服务器中定义.z.ws
。这个函数将被调用,无论你通过websocket传递什么作为参数,所以例如,如果你像这样定义.z.ws
:
.z.ws:{show x}
然后通过WebSocket发送一条消息,如下所示:
var ws = new WebSocket("ws://localhost:1234")
ws.send("Hello World")
这将在您的kdb会话中输出,例如
λ q
KDB+ 3.6 2018.06.14 Copyright (C) 1993-2018 Kx Systems
w64/ 4(16)core 8082MB jonat laptop-o8a8co1o 10.255.252.249 EXPIRE 2019.05.21 jonathon.mcmurray@aquaq.co.uk KOD #4160315
q).z.ws:{show x}
q)p 1234
q)"Hello World"
因此,在您的情况下,如果您想调用loadPage
,那么定义.z.ws
可能很简单,如下所示:
.z.ws:loadPage
然后,通过套接字传递的任何内容都将传递到loadPage
中(请注意,如果您在其他地方更改loadPage
,这将不会更新,如果您需要能够动态更新,则可以使用.z.ws:{loadPage x}
(。对于幂零函数,这将忽略中传递的任何内容