2015-09-04 55 views
0

我的目標是建立一個聊天應用 - 類似WhatsApp的要知道關於socket.io和Redis的和nginx的東西

據我瞭解,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應用程序,但我願意努力工作,如果你們可以分享一些你的知識並分享一些有用的資源,以便我可以加深我的知識關於所有這些技術。

乾杯!

+0

你有3個問題;發佈他們作爲三個單獨的問題堆棧溢出,這將幫助你得到答案 –

+0

@BasitAnwer之所以我問一切在一個問題,因爲我必須等待90分鐘的每個問題 –

+0

@BasitAnwer如果你能幫助我,並回答問題,這將是非常有幫助 –

回答

4

Q. Socket.on沒有IO.on

io.on("connection" ...) 

,當你收到一個新的連接調用。 Socket.on監聽客戶端的所有發射。如果你希望你的客戶端充當某種原因,服務器然後(簡稱)是需要io.on

Q. Redis的發佈/訂閱VS Socket.IO

乘坐看看這個SO question/anwer,引用;

Redis pub/sub非常適合所有客戶端都可以直接訪問redis的情況。如果您有多個節點服務器,則可以將消息推送給其他服務器。

但是,如果您在瀏覽器中也有客戶端,則需要其他的東西將數據從服務器推送到客戶端,在這種情況下,socket.io非常棒。

現在,如果您使用socket.io與Redis存儲套接字。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的情況下做所有事情,但這意味着你必須自己編寫代碼,爲什麼不使用一個快速和經過驗證的解決方案。