1

我已经设置了一个实例以用作 redis 工作者。所有端口都是开放的。当我发出

library("doRedis")
redisWorker(host="ZZZ-23-20-XXX-XXX.compute-1.amazonaws.com", queue="jobs")

我得到了错误

Error in socketConnection(host, port, open = "a+b", blocking = TRUE, timeout = timeout) : 
  cannot open the connection
In addition: Warning message:
In socketConnection(host, port, open = "a+b", blocking = TRUE, timeout = timeout) :
  ZZZ-23-20-XXX-XXX.compute-1.amazonaws.com:6379 cannot be opened

任何想法可能会发生什么?我也使用了内部 EC2 IP (10.XXX.XXX.ZZZ) 仍然得到同样的错误。服务器已启动,正在运行并且ping能够

我正在运行最新最好的 R、doRedis、Ubuntu 12.04 都已完全更新。之前已经讨论过这个问题,但没有找到解决方案。doRedis 在 Ubuntu Linux、R 和 RStudio 中出现奇怪的套接字连接错误

4

1 回答 1

2

尽管使用 registerDoRedis() 我也遇到过类似的问题,因为您无法设置超时,我认为问题在于函数“redisConnect”中使用的超时值。

在 R 中,如果您运行 fix(redisConnect) 并且您可以看到超时的默认值如下:

redisConnect <- function (host = "localhost", port = 6379, returnRef = FALSE, timeout = 2147483647L)

似乎这个巨大的超时值导致了这个问题。要检查在使用它的行上更改它:

con <- socketConnection(host, port, open = "a+b", blocking = TRUE, 
    timeout = timeout)

对此:

con <- socketConnection(host, port, open = "a+b", blocking = TRUE, 
    timeout = 30)

我发现这很有效,尽管一旦您重新加载包,更改就会被擦除。我今天才发现这个,所以将向开发人员提交一个错误。顺便说一句,我在 OSX 上运行 R 2.15。

您使用的函数默认为超时 30,或者您可以尝试在函数调用上设置它以确保而不是修复()底层代码。

于 2012-11-27T18:12:57.337 回答