需要了解有关 socket.io 和 redis 和 nginx 的一些信息

Jac*_*ovi 1 nginx node.js socket.io node-redis socket.io-1.0

我的目标是构建一个聊天应用程序 - 类似于 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));
  });
Run Code Online (Sandbox Code Playgroud)

1)我是否总是需要启动一个io.on('connection')来使用实时功能,或者我可以开始使用socket.on对象来代替?例如我有一条路线

app.post('/postSomething', function(req, res) {
    // Do i need to start an io.on or socket.on here?

});
Run Code Online (Sandbox Code Playgroud)

因为我希望实时功能仅在特定路线上收听。

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);
      }); 
  });
Run Code Online (Sandbox Code Playgroud)

3) 只是想知道为什么我需要 nginx 来扩展 node.js 应用程序?我找到了这个 stackoverflow 答案: 实现可扩展聊天服务器的策略

它说了一些关于负载平衡的内容,在线阅读并无法理解这个概念。

到目前为止,我只处理了 node.js ,猫鼬简单的 CRUD 应用程序,但是如果你们能分享一些知识并分享一些有用的资源,我会非常努力地工作,这样我就可以加深我对所有这些的了解技术。

干杯!

Bas*_*wer 5

Q. 没有 IO.on 的 Socket.on

io.on("connection" ... )
Run Code Online (Sandbox Code Playgroud)

收到新连接时调用。Socket.on 侦听客户端的所有发出。如果您希望您的客户端出于某种原因充当服务器,那么(简而言之)是 io.on 是必需的

问:Redis 发布/订阅与 Socket.IO

看看这个SO question/anwer,引用;

Redis pub/sub 非常适合所有客户端都可以直接访问 redis 的情况。如果您有多个节点服务器,则可以将消息推送给其他节点。

但是如果浏览器中也有客户端,则需要其他东西将数据从服务器推送到客户端,在这种情况下,socket.io 很棒。

现在,如果您将 socket.io 与 Redis 存储一起使用,socket.io 将在后台使用 Redis pub/sub 在服务器之间传播消息,而服务器将向客户端传播消息。

因此,使用带有 Redis 存储配置的 socket.io 的 socket.io 房间对您来说可能是最简单的。

如果需要,Redis 可以充当消息队列。Redis 是一种支持多种数据类型的数据存储。

Q. 为什么 Nginx 和 Node.js

Node.js 可以独立工作,但 nginx 处理静态内容的速度更快。

由于 nginx 是一个反向代理,因此服务器配置了 nginx 来处理所有静态数据(提供静态文件、执行重定向、处理 SSL 证书和提供错误页面。)并且所有其他请求都发送到 node.js

也请查看此 Quora 帖子:我应该在没有 nginx 的情况下托管 node.js 项目吗? 引用:

Nginx 可用于从 Node.js 进程中移除一些负载,例如,提供静态文件、执行重定向、处理 SSL 证书和提供错误页面。

你可以在没有 Nginx 的情况下做任何事情,但这意味着你必须自己编写代码,所以为什么不为此使用快速且经过验证的解决方案。