[英]Need to know something regarding socket.io and redis and nginx
我的目标是建立一个聊天应用程序-与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应用程序? 我找到了这个stackoverflow答案: 实施可扩展聊天服务器的策略
它说了一些有关负载平衡的内容,在线阅读并不能理解这个概念。
到目前为止,我只处理过mongoose简单的CRUD应用程序node.js,但是如果你们可以分享一些知识并分享一些有用的资源,以便在我加深对所有这些知识的基础上,我将非常努力地工作。技术。
干杯!
Q. Socket.on不带IO.on
io.on("connection" ... )
收到新的连接时被调用。 Socket.on监听客户端的所有发射。 如果您出于某种原因希望客户端充当服务器,则(简而言之)是io.on是必需的
问:Redis发布/订阅与Socket.IO
看看这个SO问题/答案 ,引用;
如果所有客户端都可以直接访问redis,那么Redis pub / sub非常有用。 如果您有多个节点服务器,则一台服务器可以向其他服务器推送一条消息。
但是,如果浏览器中也有客户端,则需要其他一些东西来将数据从服务器推送到客户端,在这种情况下,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帖子: 我应该在没有nginx的情况下托管node.js项目吗? 引用:
Nginx可用于减轻Node.js进程的负担,例如,提供静态文件,进行重定向,处理SSL证书和提供错误页面。
您可以在没有Nginx的情况下做所有事情,但这意味着您必须自己编写代码,所以为什么不为此使用快速且成熟的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.