繁体   English   中英

需要了解有关socket.io和Redis和Nginx的一些知识

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM