[英]How to implement push notification system on a mysql database with node.js
我是node.js
新手,我想在MySql
數據庫上實現推送通知系統。 我的數據庫中有一個通知表。 在此表中,我有recipient_id
,用於指定通知的收件人。 現在我想要一個帶有recipient_id
的新通知等於當前登錄用戶的id通知該用戶。 像Stackoverflow
這樣的東西如果您在例如java
標記的問題中,每次創建帶有java
標記的新問題時,頁面頂部都會顯示一條通知: 1 question with new activity.
抱歉我的英語不好。 請幫我實現這個系統,因為我是新手。
我已經制作了一個像你的要求的簡單應用程序
您可以從以下代碼行獲得幫助。您需要了解代碼的基礎知識。 之后,您將輕松實現目標。 本演示應用程序中涵蓋了您的要求中的大部分內容。
它不是一個確切的但你會通過這個達到你的目標。
在此示例中,任何用戶的狀態帖子也將同時向所有其他用戶發出。 我們可以操縱它來實現“1新狀態”。
在數據庫中創建一個表,在其中保存要保存的條目CREATE TABLE status
(
`status_id` INT NOT NULL AUTO_INCREMENT,
`s_text` TEXT,
`t_status` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ( `status_id` )
);
//server.js
var app = require("express")();
var mysql = require("mysql");
var http = require('http').Server(app);
var io = require("socket.io")(http);
/* Creating POOL MySQL connection.*/
var pool = mysql.createPool({
connectionLimit: 100,
host: 'localhost',
user: 'root',
password: '',
database: 'fbstatus',
debug: false
});
app.get("/", function(req, res) {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket) {
console.log("A user is connected");
socket.on('status added', function(status) {
add_status(status, function(res) {
if (res) {
io.emit('new status', status);
} else {
io.emit('error');
}
});
});
});
var add_status = function(status, callback) {
pool.getConnection(function(err, connection) {
if (err) {
connection.release();
callback(false);
return;
}
connection.query("INSERT INTO `status` (`s_text`) VALUES ('" + status + "')", function(err, rows) {
connection.release();
if (!err) {
callback(true);
}
});
connection.on('error', function(err) {
callback(false);
return;
});
});
}
http.listen(3000, function() {
console.log("Listening on 3000");
});
//index.html
<html>
<head>
<title>Socket.io</title>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script src = "http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script>
$(document).ready(function(){
var socket = io();
$("#add_status").click(function(){
socket.emit('status added',$("#comment").val());
});
socket.on('new status',function(msg){
var count = $('#count_status').text();
var valCount = parseInt(count);
if(valCount>=1) {
valCount = valCount+1;
} else {
valCount = 1;
}
var showMsg = '<div id="count_status"> '+valCount+' </div> new status';
$("#show_comments").html(showMsg);
});
});
</script>
</head>
<body>
<div id="comment_box" style = "padding:5%;">
<textarea id="comment" rows="5" cols="70"></textarea><br /><br />
<input type="button" id="add_status" value="Add">
</div>
<div id= "show_comments" class = "jumbotron"></div>
</body>
</html>
使用以下命令節點Server.js運行應用程序
現在在瀏覽器中運行http:// localhost:3000 /並查看結果,打開一個新窗口,在該窗口中發布狀態並在窗口中查看新狀態通知。
謝謝
編輯:這是一個很棒的啟動教程。 有些事情需要修改。
你可以通過兩種方式做到:
websockets
來維護客戶端和服務器之間的永久連接,然后您可以通過服務器代碼實時向客戶端發送通知。 請參閱socket.io
教程。 這稱為推送策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.