[英]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.