我寫了簡單的腳本(app.js)認購Redis的通道node.js和redis中的專用頻道。如何?
var app = require('express').createServer()
, io = require('socket.io').listen(app);
var redis = require("redis");
app.listen(8080);
////////////// Dev environment; replace by PERL in production use.
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
//////////////
io.sockets.on('connection', function (socket) {
socket.subscribe = redis.createClient();
socket.subscribe.subscribe('chat');
socket.subscribe.on("message", function(channel, message) {
socket.send(message);
});
socket.on('disconnect', function() {
socket.subscribe.quit();
});
socket.on('close', function() {
socket.subscribe.quit();
});
});
現在,我要讓可能認購爲每個用戶專用通道。
我試圖通過socket.io.connect通過額外的數據是這樣的:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080', {'PRIVATE_ROOM_HASH': 'secret_hash'});
socket.on('message', function (data) {
console.log(data);
});
</script>
,然後在app.js
...
io.sockets.on('connection', function (socket, args) {
socket.subscribe = redis.createClient();
socket.subscribe.subscribe(args.PRIVATE_ROOM_HASH);
socket.subscribe.on("message", function(channel, message) {
socket.send(message);
});
,但它不工作。
任何想法如何解決私人房間的問題?
謝謝。
謝謝DeaDEnD!我認爲這是一個很好的解決方案。無論如何,我不會使用socket.join和socket.broadcast,因爲我在應用程序的其他部分也使用Redis(例如,在Perl的代碼中),所以我將留在redis.createClient() – User 2011-12-17 09:47:16