2017-08-26 87 views
1

我有兴趣使用Gdax(Coinbase)WebSocket获取实时数据。我是一个总的小白,所以我检查Gdax发布他们的文档中的例子:消息类型websocket gdax(coinbase)

import gdax, time 
class myWebsocketClient(gdax.WebsocketClient): 
    def on_open(self): 
     self.url = "wss://ws-feed.gdax.com/" 
     self.products = ["LTC-USD"] 
     self.message_count = 0 
     print("Lets count the messages!") 
    def on_message(self, msg): 
     self.message_count += 1 
     if 'price' in msg and 'type' in msg: 
      print ("Message type:", msg["type"], 
        "\[email protected] {}.3f".format(float(msg["price"]))) 
    def on_close(self): 
     print("-- Goodbye! --") 

wsClient = myWebsocketClient() 
wsClient.start() 
print(wsClient.url, wsClient.products) 
while (wsClient.message_count < 500): 
    print ("\nmessage_count =", "{} \n".format(wsClient.message_count)) 
    time.sleep(1) 
wsClient.close() 

输出是:

... 
Message type: received @ 50.78.3f 
Message type: open  @ 50.78.3f 
Message type: done  @ 51.56.3f 
Message type: received @ 51.59.3f 
Message type: open  @ 51.59.3f 
Message type: done  @ 51.51.3f 
Message type: done  @ 51.17.3f 
Message type: done  @ 51.66.3f 

Kernel died, restarting 

我有一个关于这个代码和输出的几个问题:

  1. 什么是消息类型(收到,打开,完成,匹配)是什么意思,哪种类型用于计算,以及为什么某些类型被跳过?
  2. 为什么运行代码总是以'内核死亡,重新启动'结束?
  3. 该文档声明此代码仅用于说明。这是否意味着这不是一种获得实时数据的正确方法,以便用它来做什么?

如果你知道一些好的文章或书籍,可以教一个noob如何使用WebSockets,我很想听听他们!

回答

1

1)看到完整的文档,每个消息here

2)一切我发现有关该问题源于环境的建立。无论是图书馆依赖没有正确安装或其他环境因素。

3)这是一种建立与WebSocket连接的正确方法,但它们不提供任何错误处理或其他逻辑。它通常是合法地覆盖自己,并减少他们提供的代码的期望(即当有人收到类似的错误,他们不负责修复,更新,帮助等)

0

Python解释器(3.6.2 64bit胜)也为我亲近()。

这里是一个定位点(从https://github.com/danpaquin/gdax-python/issues/152):

client.stop = True 
client.thread.join() 
client.ws.close() 

我只是在on_close方法并没有更多的崩溃(到目前为止)加入这些。

ps:问题链接说它应该在最新的gdax版本中修复,但最新的pip gdax(1.0.6)仍然崩溃。

0

在构建完整的实时订购书(第3级)时有几个缺陷需要注意,我不能在这里记录,但您可能有兴趣了解GDAX现在提供了第2级(几乎实时)更新,它将向您发送订单簿的更新价格。实施起来可能要简单得多。