您可以使用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的
這並不是我所要求的......我是要求我可以在聊天應用中使用activemq和nodejs的用例......我知道如何創建聊天應用:) –
我說過那就沒有必要使用activemq了。你可以用socke.io。喲不需要像ActiveMQ那樣將你的消息放入隊列中。我建議你使用一個使用推送通知的機制。如果你堅持使用隊列,我建議你http://learnboost.github.io/kue/ –
SocketIO是我已經用於聊天應用的東西。可能是我沒有提到它...有任務分配給我連接socketIO和activeMq ..我也無法理解爲什麼我應該這樣做..但有谷歌論壇在人們嘗試相同的技術..仍然不清楚的用例爲什麼我應該這樣做,爲什麼我不應該這樣做 –