我设法使用以下规范在 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 似乎没有触发“接收”方法,也没有显示任何内容。代码以没有输出的无限循环结束。
我知道 websocket 正在工作,所以代码中一定有错误。我是否必须以某种方式“ping”套接字才能开始广播?任何人都知道如何让它工作?
谢谢!
最佳答案
首先,你有一个无限循环,因为你已经定义了一个无限循环:
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 中隐式打印的数据。打印 功能。
样本:
{
"op":"remark",
"message":<MESSAGE FROM THE SERVER>,
"success":<boolean>
}
如果数据遵循规范中定义的这种格式,您可以检查数据的解析方式以及返回的“op”。
关于r - R 中的 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741217/