簡體   English   中英

如何使用node.js在mysql數據庫上實現推送通知系統

[英]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 /並查看結果,打開一個新窗口,在該窗口中發布狀態並在窗口中查看新狀態通知。

謝謝

編輯:這是一個很棒的啟動教程。 有些事情需要修改。

  1. connection.release()代碼最終無法讀取且無法正常工作。 你應該彗星或刪除它。

2.我案例中的實際輸出: daniel adenew軟件工程師

你可以通過兩種方式做到:

  • 每隔n秒查詢服務器以獲取任何新消息。 將上次檢查的時間戳作為參數傳遞,如果上次檢查后有任何通知,則返回json並在客戶端顯示。 這被稱為拉動策略。
  • 或者,您可以使用websockets來維護客戶端和服務器之間的永久連接,然后您可以通過服務器代碼實時向客戶端發送通知。 請參閱socket.io教程。 這稱為推送策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM