需要了解有关 socket.io 和 redis 和 nginx 的一些信息
Posted
技术标签:
【中文标题】需要了解有关 socket.io 和 redis 和 nginx 的一些信息【英文标题】:Need to know something regarding socket.io and redis and nginx 【发布时间】:2015-11-30 11:39:24 【问题描述】:我的目标是构建一个聊天应用程序 - 类似于 whatsapp
据我了解,socket.io 是一个用 javascript 编写的实时通信库,使用起来非常简单
例如
// Serverside
io.on('connection', function(socket)
socket.on('chat', function(msg)
io.emit('chat', msg);
);
);
// ClientSide (Using jquery)
var socket = io();
$('form').submit(function()
socket.emit('chat', $('#m').val());
$('#m').val('');
return false;
);
socket.on('chat', function(msg)
$('#messages').append($('<li>').text(msg));
);
1) 我是否总是需要启动 io.on('connection')
来使用实时功能,或者我可以开始使用 socket.on
对象来代替?例如我有一条路线
app.post('/postSomething', function(req, res)
// Do i need to start an io.on or socket.on here?
);
因为我希望实时功能仅在特定路线上收听。
2) Redis 是一个处理 pub/sub 的数据结构库,为什么我们需要使用 pub/sub 机制? 我读了很多文章,但无法理解这个概念。文章示例http://ejosh.co/de/2015/01/node-js-socket-io-and-redis-intermediate-tutorial-server-side/
例如下面的代码
// Do i need redis for this, if so why? is it for caching purposes?
// Where does redis fit in this code?
var redis = require("redis");
var client = redis.createClient();
io.on('connection', function(socket)
socket.on('chat', function(msg)
io.emit('chat', msg);
);
);
3) 只是想知道为什么我需要 nginx 来扩展 node.js 应用程序?我找到了这个***答案: Strategy to implement a scalable chat server
上面说了一些关于负载平衡的内容,在网上阅读,也无法理解这个概念。
到目前为止,我只处理 node.js ,猫鼬简单的 CRUD 应用程序,但如果你们能分享一些知识并分享一些有用的资源,我愿意努力工作,这样我就可以加深我的知识所有这些技术。
干杯!
【问题讨论】:
您有 3 个问题;将它们作为堆栈溢出的三个单独问题发布,这将帮助您获得答案 @BasitAnwer 为什么我在一个问题中提出所有问题,因为我必须为每个问题等待 90 分钟 @BasitAnwer 如果你能帮助我并回答这个问题,那真的很有帮助 已回答;但请不要这样做。如果有人知道 3 个问题中 2 个的答案,他/她可能会犹豫回答您的完整问题以及它是否违反 SO 规则。 【参考方案1】:问。没有 IO.on 的 Socket.on
io.on("connection" ... )
在收到新连接时调用。 Socket.on 监听客户端的所有发射。如果您出于某种原因希望您的客户端充当服务器,那么(简而言之)yes io.on 是必需的
问。 Redis 发布/订阅与 Socket.IO
看看这个SO question/anwer,引用;
Redis 发布/订阅非常适合所有客户端都可以直接访问 Redis。如果您有多个节点服务器,一个可以向其他节点推送消息。
但是如果您在浏览器中也有客户端,则需要其他东西将数据从服务器推送到客户端,在这种情况下,socket.io 很棒。
现在,如果您将 socket.io 与 Redis 存储一起使用,socket.io 将在后台使用 Redis pub/sub 在服务器之间传播消息,而服务器将向客户端传播消息。
因此,使用带有 Redis 存储的 socket.io 配置的 socket.io 房间对您来说可能是最简单的。
如果需要,Redis 可以充当消息队列。 Redis 是一个支持多种数据类型的数据存储。
问。为什么选择 Nginx 和 Node.js
Node.js 可以独立工作,但 nginx 更快地服务器静态内容。
由于 nginx 是一个反向代理,因此服务器配置了 nginx 来处理所有静态数据(提供静态文件、进行重定向、处理 SSL 证书和提供错误页面。 ) 并且所有其他请求都发送到 node.js
也请查看此 Quora 帖子:Should I host a node.js project without nginx? 引用:
Nginx 可用于从 Node.js 进程中移除一些负载,例如,提供静态文件、执行重定向、处理 SSL 证书和提供错误页面。
你可以在没有 Nginx 的情况下做任何事情,但这意味着你必须自己编写代码,所以为什么不为此使用快速且经过验证的解决方案。
【讨论】:
以上是关于需要了解有关 socket.io 和 redis 和 nginx 的一些信息的主要内容,如果未能解决你的问题,请参考以下文章
使用 Redis 扩展 Socket.IO,然后扩展 Redis 本身