簡體   English   中英

socket.io redis存儲在openshift上

[英]socket.io redis store on openshift

我正在嘗試在node.js上設置socket.io以使用redisstore,以便我可以在opsubshift平台上與具有多個節點的pubsub進行通信,但是我無法設法連接到Redis服務器。 我正在使用這個墨盒 我試圖與

var pub    = redis.createClient(process.env.OPENSHIFT_REDIS_DB_PORT,
                                process.env.OPENSHIFT_REDIS_DB_HOST);

但是它不起作用(我發現了原因: createClient()只接受IP地址 ),並且回退到默認端口和主機,然后我運行rhc port-forward

$ rhc port-forward appname
Checking available ports ... done
Forwarding ports ...
Address already in use - bind(2) while forwarding port 8080. Trying local port 8081

To connect to a service running on OpenShift, use the Local address

Service         Local                OpenShift
--------------- --------------- ---- ----------------------------------------------
haproxy         127.0.0.1:8080   =>  127.5.149.130:8080
haproxy         127.0.0.1:8081   =>  127.5.149.131:8080
s_redis_db_host 127.0.0.1:54151  =>  blabla.appname.rhcloud.com:54151

Press CTRL-C to terminate port forwarding

所以我堅強地做錯了所有事情,我只需要像這樣設置端口:

var pub = redis.createClient(process.env.OPENSHIFT_REDIS_DB_PORT);

但我得到的只是這個

info: socket.io started
events.js:72
     throw er; // Unhandled 'error' event
           ^
Error: Redis connection to 127.0.0.1:54151 failed - connect ECONNREFUSED
 at RedisClient.on_error (/var/lib/openshift/532c3790e0b8cd9bb000006b/app-root/runtime/repo/node_modules/socket.io/node_modules/redis/index.js:149:24)
 at Socket.<anonymous> (/var/lib/openshift/532c3790e0b8cd9bb000006b/app-root/runtime/repo/node_modules/socket.io/node_modules/redis/index.js:83:14)
 at Socket.EventEmitter.emit (events.js:95:17)
 at net.js:426:14
 at process._tickCallback (node.js:415:13)
 DEBUG: Program node server.js exited with code 8

我試圖通過

telnet $OPENSHIFT_REDIS_DB_HOST $OPENSHIFT_REDIS_DB_PORT

而且效果很好...您有什么建議嗎? 我做錯了嗎? (我對redis和socket.io還是陌生的)(我省略了其余代碼,因為我知道它可以工作,我在本地計算機上沒有問題,只是無法獲得連接...)謝謝很多

但它不起作用(我發現原因:createClient()僅接受IP地址),並且回退到默認端口和主機

它確實支持主機, createClient使用net.createConnection(port, host); 不支持主機名。

以下代碼將幫助您發現問題:

console.log(process.env);
var pub    = redis.createClient(process.env.OPENSHIFT_REDIS_DB_PORT,
                                process.env.OPENSHIFT_REDIS_DB_HOST, {auth_pass: process.env.OPENSHIFT_REDIS_DB_PASSWORD});
pub.on('error', console.log.bind(console));
pub.on('ready', console.log.bind(console, 'redis ready'));

您的openshift Redis實例是否需要AUTH

不知道是否有關openshift的最新更改,但我認為問題出在變量上。 雖然他們為telnet工作。

你可以試試這個

var redisHost = process.env.OPENSHIFT_REDIS_HOST;
var redisPort = process.env.OPENSHIFT_REDIS_PORT;
var redisPass = process.env.REDIS_PASSWORD;

var client = redis.createClient( redisPort, redisHost );
client.auth( redisPass );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM