簡體   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