2014-03-03 95 views
0

我知道一點node.js,並正在尋找它的實施聊天應用程序。但從設計角度來看,是否需要在後端連接到像ActiveMQ這樣的排隊機制?我無法得到它爲什麼需要的情況。在排隊時排隊消息並將它們存儲到MongoDB會是一個好主意嗎?連接ActiveMQ與node.js實施聊天應用程序?

簡而言之:我無法獲得場景,爲什麼我應該將node.js和ActiveMQ連接到聊天應用程序。

這是更多的架構或設計基礎問題,請回答同一行。

我想要的是對使用Socket.IO和ActiveMQ的優點和缺點的一些正確解釋。

其次,如果我使用redis?它被認爲比MongoDB快10倍。我還需要ActiveMQ嗎?

請用用例說明。

回答

2

您可以使用SocketIO通過網絡套接字在nodejs中執行聊天應用程序。只需你有客戶和聊天服務器。

服務器:

var express = require('express'); 
var io = require('socket.io'); 

var app = express.createServer(); 
app.listen(8080); 
app.use(express.static(__dirname)); 

app.get('/', function(req, res){ 
    res.render('index.html', { title: 'Chat Main Page' }); 
}); 

var socket = io.listen(app); 

socket.on('connection', function (client) { 
    client.on('message', function (msg) { 
     // You can store msgs here to mongo db. {msg: msg, client_id: socket.id} 
     socket.broadcast(msg); 
    }); 
    client.on('disconnect', function() { 
    }); 
}); 

客戶:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="path_to_jquery.js"></script> 
    <script src="http://localhost:8080/socket.io/socket.io.js"></script> 
     <script> 
      var socket = io.connect("http://localhost", {port: 8080}); 

      socket.on('message', function (msg) { 
        $('div#messages').append($('<p>'), msg); 
      }); 

     $(document).ready(function(){ 
      $('#send').click(function (event) { 
       socket.send($('#msg').val()); 
       $('#msg').val(''); 
      }); 
     }); 
     </script> 
    </head> 
    <body> 
     <textarea id="msg"></textarea> 
     <input type="button" id="send" value="Send" /> 
     <div id="messages" ></div> 
    </body> 
</html> 

當你啓動服務器,並轉到http://yourserve:8080/index.html,你會看到聊天頁面。我已經使用socket.io的廣播屬性。當你點擊發送按鈕時,它會發送消息給所有連接的客戶端。他們將在messages div上看到新消息。您也可以存儲在聊天服務器實現信息

編輯:

在現實生活中,人們使用作業隊列爲解決所謂的「快生產者慢消費」的問題。這是什麼意思?您正在開發聊天應用程序,並且您想要將聊天消息存儲到數據庫中。發送消息時,您正在將消息寫入數據庫。但是,當您嘗試在每個消息傳遞中將消息存儲到數據庫時,這會使您的數據庫超載。你的系統產生的東西很快,但你的db以較慢的方式迴應它。如果您像使用ActiveMQ一樣使用Job Queue,則可以將消息發送到activemq並將其放入隊列中。該隊列將在後臺進行管理,而不會依賴於您的聊天應用程序。簡單地說,將您的工作發送到activemq,並繼續您的聊天操作。 ActiveMQ將它發送給popic,你的聽衆將從主題中獲取它們並保存到db中。

您可以看看生產者 - 消費者問題here

但是,如果您不想將消息存儲到db,則可以使用SocketIO。另外,如果你沒有overloadded系統有很多的用戶,你可以用MongoDB的使用SocketIO沒有ActiveMQ的

+0

這並不是我所要求的......我是要求我可以在聊天應用中使用activemq和nodejs的用例......我知道如何創建聊天應用:) –

+0

我說過那就沒有必要使用activemq了。你可以用socke.io。喲不需要像ActiveMQ那樣將你的消息放入隊列中。我建議你使用一個使用推送通知的機制。如果你堅持使用隊列,我建議你http://learnboost.github.io/kue/ –

+0

SocketIO是我已經用於聊天應用的東西。可能是我沒有提到它...有任務分配給我連接socketIO和activeMq ..我也無法理解爲什麼我應該這樣做..但有谷歌論壇在人們嘗試相同的技術..仍然不清楚的用例爲什麼我應該這樣做,爲什麼我不應該這樣做 –

1

爲什麼人們可能在一個聊天應用

  • 保證交付使用ActiveMQ是必需的,這樣的ActiveMQ持久傳遞是 使用(也許聊天已審計)
  • 網絡可靠性已知是差,聊天應用程序需要處理網絡丟失 。一條消息不會丟失。
  • 需要從位於操作中心的管理員 儀表板/控制檯實時監控聊天。
相關問題