这是我的代码使用socket.io作为WebSocket和后端与pub/sub redis.
var io = io.listen(server),
buffer = [];
var redis = require("redis");
var subscribe = redis.createClient(); **<--- open new connection overhead**
io.on('connection', function(client) {
console.log(client.request.headers.cookie);
subscribe.get("..", function (err, replies) {
});
subscribe.on("message",function(channel,message) {
var msg = { message: [client.sessionId, message] };
buffer.push(msg);
if (buffer.length > 15) buffer.shift();
client.send(msg);
});
client.on('message', function(message){
});
client.on('disconnect', function(){
subscribe.quit();
});
});
Run Code Online (Sandbox Code Playgroud)
每个新的io请求都将创建新的redis连接.如果有人用100个标签打开浏览器,那么redis客户端将打开100个连接.它看起来不太好看.
如果cookie相同,是否可以重用redis连接?因此,如果有人打开许多浏览器标签,也将其视为开放1连接.
我试图跨多个进程和/或服务器扩展一个简单的socket.io应用程序.
Socket.io支持RedisStore,但我对如何使用它感到困惑.
我正在看这个例子, http://www.ranu.com.ar/post/50418940422/redisstore-and-rooms-with-socket-io
但我不明白在该代码中使用RedisStore与使用MemoryStore有何不同.有人可以向我解释一下吗?
另外,配置socket.io以使用redisstore与创建自己的redis客户端以及设置/获取自己的数据有什么区别?
我是node.js,socket.io和redis的新手,所以请指出我是否错过了一些明显的东西.
我是redis pub/sub的新手.我在系统中有一个聊天工具,就像IM一样.所以我想使用redis pub/sub.正如我检查过的样本,大多数是基于聊天室设计的.在我的系统中,我将在用户之间设置多个聊天室;
A:B
A:C
D:C
E:F
Run Code Online (Sandbox Code Playgroud)
所以,上面的线是房间.我用node.js实现了服务器,如下所示;
var store = redis.createClient();
var pub = redis.createClient();
io.sockets.on('connection', function (socket) {
var sub = redis.createClient();
sub.on("message", function(pattern, data){
data = JSON.parse(data);
socket.send(JSON.stringify({ type: "chat", key: pattern, nick: data.nickname, message: data.text }))
}
});
socket.on('message', function (messageData) {
store.incr("messageNextId", function(e, messageId) {
var room = ""
var from = messageData.clientId > socket.nickname ? socket.nickname : messageData.clientId;
var to = messageData.clientId < socket.nickname ? socket.nickname : messageData.clientId;
room = from + ":" + …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Redis Cookbook示例:
var http = require('http'),
io = require('socket.io')
fs = require('fs'),
redis = require('redis'),
rc = redis.createClient(9189, "pike.redistogo.com");
rc.auth("passwd", function() {
console.log("Connected! to redistogo!");});
rc.on("connect", function() {
rc.subscribe("chat");
console.log("rc connect event");
});
Run Code Online (Sandbox Code Playgroud)
我在这里取得了成功但从未得到"消息".
rc.on("message", function (channel, message) {
console.log("Sending: " + message);
socketio.sockets.emit('message', message);
});
webpage = http.createServer(function(req, res){
console.log('webpage request starting...');
fs.readFile('./index.htm', function(error, content) {
if (error) {
res.writeHead(500);
res.end();
}
else {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
}
});
});
webpage.listen(7777);
Run Code Online (Sandbox Code Playgroud)
我的客户端index.htm就是这个
<!docttype html>
<html …Run Code Online (Sandbox Code Playgroud) 我想为聊天室应用程序创建一个node.js服务器集群,以支持高并发性.我需要能够在所有节点之间共享信息.我试图找出保持所有服务器同步的最佳方法.我希望共享对象具有尽可能多的灵活性,因为我计划在将来添加更多功能.
到目前为止,我有两个解决方案:
哪个更好?还有其他想法吗?