我目前正在使用Node.js開發聊天系統。我的問題是,我如何處理Node.js的多個聊天會話。這有點含糊,所以我會解釋...如何使用Node.js處理多個聊天會話
因此,例如,兩個人可能參與聊天會話。 Node.js每隔幾秒檢查一次新消息。這很簡單,因爲我可以使用下面的代碼正常工作。
我的問題是當另外兩個人在同一時間在另一個聊天會話。
目前我發送兩個名爲「chat_id」和「check_date」的查詢字符串,以便它可以在特定的日期和時間後檢查新的聊天消息。
問題是,由於聊天室正在使用服務器,因此每次開始新聊天時都會覆蓋「chat_id」和「check_date」。
我有道理嗎?
我下面的代碼:
var chat_id, check_date;
var sys = require("sys"),
http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
events = require("events");
// Conntect to database
var Client = require('mysql').Client;
var client = new Client();
client.host = 'localhost';
client.port = 3306;
client.database = '****';
client.user = '****';
client.password = '****';
client.connect(function(error, results) {
if(error) {
console.log('Connection Error: ' + error.message);
return;
}
console.log('Connected to MySQL');
});
// Check for chat updates
function getChatUpdates() {
if (typeof(check_date) == 'undefined')
return;
client.query('SELECT name, message FROM chat WHERE chat_id = "' + chat_id + '" AND date_entered > "' + check_date + '"',
function selectCb(error, results, fields) {
if (error) {
console.log('GetData Error: ' + error.message);
client.end();
return;
}
if (results.length > 0) {
for(var i = 0;i<results.length;i++) {
console.log('Name: ' + results[i]['name']);
console.log('Message: ' + results[i]['message']);
}
}
});
}
// Set interval to check for chat updates every 2 seconds
setInterval(getChatUpdates, 2000);
http.createServer(function(request, response) {
// Get the query strings
var uri = url.parse(request.url, true);
chat_id = uri.query.chat_id;
check_date = uri.query.check_date;
console.log('Chat ID: ' + chat_id);
console.log('Last Check: ' + check_date);
// we'll do something here later.
}).listen(8080);
sys.puts("Server running at http://localhost:8080/");
太棒了!我仍然希望存儲在MySQL中,以便我可以訪問來自PHP的聊天消息。使用多個數據存儲是否夠容易,以便NodeJS更有效地工作?還有什麼建議?除此之外,您的迴應會有很大幫助! –
@你可以也應該使用preis的PHP使用redis,特別是當你想存儲聊天消息時,因爲redis是非常快的產品=> https://github.com/nrk/predis/ – Alfred