4

我设法使用以下规格在 R 中建立与 Mtgox websocket 的连接:

我使用了从https://github.com/zeenogee/R-Websockets下载的改进的 R 库“websocket” :

require("websockets")
con = websocket("https://socketio.mtgox.com/mtgox?Currency=USD")

并成功建立连接。但是,似乎套接字没有广播。我做了一个简单的函数 f

  f = function(con) {
  Print("Test Test!", con)
}

set_callback("receive", f, con)

while(TRUE)
  {
  service(con)
  Sys.sleep(0.05)
  }

每当从 websocket 接收到一些数据时,它应该打印一些文本。但是 websocket 似乎没有触发“receive”方法并且没有显示任何内容。代码以无限循环结束,没有输出。

我知道 websocket 正在工作,所以代码中一定有错误。我是否必须以某种方式“ping”套接字才能开始广播?任何人都知道如何让它工作?谢谢!

4

1 回答 1

5

首先,你有一个无限循环,因为你已经定义了一个无限循环:

While(TRUE)

值得注意的是,许多 R websocket 实现都利用了这个循环,因此可能不是错误,而是导致您所看到的实现细节。

看来您需要订阅“消息”事件而不是“接收”( https://en.bitcoin.it/wiki/MtGox/API/Streaming)。

在 JavaScript 中(来自 MtGox 规范):

conn.on('message', function(data) {
    // Handle incoming data object.
});

或在 R 中:

set_callback('message',f,con)

做不到...

我还要评论说,也许流正在返回您无法在 R Print中隐式打印的数据函数中隐式打印的数据。

样本:

{
  "op":"remark",
  "message":<MESSAGE FROM THE SERVER>,
  "success":<boolean>
}

如果数据遵循规范中定义的这种格式,您可以检查该数据是如何被解析的,以及正在返回的“操作”。

于 2013-06-24T12:49:07.553 回答