1. 程式人生 > >Nodejs和一個簡單的web頁面訊息推送服務

Nodejs和一個簡單的web頁面訊息推送服務

前言:

英語能力有限,所以不能叫做純翻譯,大概比例是70%翻譯,20%理解,10%自由發揮

原文:

http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/

簡述:

用socket.io建立服務端和客戶端的雙向連線,當服務端的xml檔案發生變化時,向客戶端推送xml內容

------------- start -----------------------

在本文中我將向你展示如何使用nodejssocket.io建立一個push(推送)服務。通常如果我們想更新web應用的一些內容,我們採用javascript論詢(timer)或者簡單地使用AJAX請求web服務以此來實現更新頁面內容。這對於小使用者量的應用來說是個不錯的解決方案,但是使用這種方法當大量使用者同一時間在你的頁面會怎麼樣?


你應該知道,AJAX請求=客戶端請求頭(header)+服務端響應頭(response header)+資料(data)。(更多關於此的資訊請見這篇文章websocket performance(websocket效能))。所以如果你的web應用有大量使用者使用大量AJAX請求來下載更新內容,甚至可能包含一些不需要更新的無用AJAX請求,你的伺服器會被迫支援大量不必要的輪詢。解決這個大問題你可能有兩個解決方案:

1、你是google,所以你有大量的伺服器群允許你做任何無用功、允許你揮霍、浪費

2、你瀟灑地使用跨瀏覽器解決方案構建一個簡潔的推送訊息服務。

下面我將向你展示如何構建一個簡潔的訊息推送服務,先從程式碼開始。首先你需要在你的伺服器上

安裝nodejs。然後對於這個例項我們需要引用socket.io和xml2js兩個nodejs模組到我們的專案中。你可以通過命令列使用"npm(node包管理node package manager)"安裝任意的nodejs模組,像這樣:

$ npm install socket.io
$ npm install xml2json

下面新建一個server.js檔案,它包含所有將執行在伺服器上的nodejs程式碼。

var app = require('http').createServer(handler),
  io = require('socket.io').listen(app),
  parser = new require('xml2json'),
  fs = require('fs');

// 建立一個服務,埠號是8000 ( localhost:8000 )
app.listen(8000);

console.log('server listening on localhost:8000');

// 載入 client.html 頁面
function handler(req, res) {
  fs.readFile(__dirname + '/client.html', function(err, data) {
    if (err) {
      console.log(err);
      res.writeHead(500);
      return res.end('Error loading client.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}

// creating a new websocket to keep the content updated without any AJAX request
io.sockets.on('connection', function(socket) {
  console.log(__dirname);
  // watching the xml file
  fs.watchFile(__dirname + '/example.xml', function(curr, prev) {
    // 如果xml檔案發生了改變,讀取xml檔案
    fs.readFile(__dirname + '/example.xml', function(err, data) {
      if (err) throw err;
      // xml轉換為json
      var json = parser.toJson(data);
      // 傳送新的資料到客戶端
      socket.volatile.emit('notification', json);
    });
  });

});

建立一個簡單的example.xml檔案。
<span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>
<test>
    <sample>Hello world!</sample>
</test></span>

最後你可以自由地建立你的前端頁面client.html,當example.xml發生變化時會你的資料將會被推送。
<html>
    <head>
    <!--
     * Author:      Gianluca Guarini
     * Contact:     [email protected]
     * Website:     http://www.gianlucaguarini.com/
     * Twitter:     @gianlucaguarini
    -->
        <title>Push notification server</title>
    </head>
    <body>
        <time></time>
        <div id="container">Try to change your xml data to update this content</div>
    <script src="socket.io/socket.io.js"></script>
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script>
    // creating a new websocket
    var socket = io.connect('http://localhost:8000');
    // on every message recived we print the new datas inside the #container div
    socket.on('notification', function (data) {
        // convert the json string into a valid javascript object
        var _data = JSON.parse(data);

        $('#container').html(_data.test.sample);
        $('time').html('Last Update:' + new Date());
    });
    </script>
    </body>
</html>

【此處作者還提供了個視訊,需要翻牆看,在youtube】

正是因為有socket.io才有了這個簡單又跨平臺的解決方案,我們在html頁面和伺服器間建立了一個雙向連線,只有xml發生改變時才會推送新的資料,可以利用的技術包括新的websocket api甚至是回退到flash技術(更多socket.io去這裡)

下載教程

如果你喜歡這篇文章,你可以讀我的新文章——如何讓你的Nodejs推送訊息服務連線mysql資料庫。

---------------- end --------------------

其實我要找的是app的安卓推送,跑偏了==!

相關推薦

Nodejs一個簡單web頁面訊息服務

前言: 英語能力有限,所以不能叫做純翻譯,大概比例是70%翻譯,20%理解,10%自由發揮 原文: http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/ 簡述: 用

手把手教你設計一個百萬級的訊息系統

本文分享的內容不但可以滿足物聯網領域同時還支援以下場景: 基於 Web 的聊天系統(點對點、群聊)。 Web 應用中需求服務端推送的場景。 基於 SDK 的訊息推送平臺。 技術選型 要滿足大量的連線數、同時支援雙全工通訊,並且效能也得有保障。 在 Java 技術

技術乾貨:從零開始,教你設計一個百萬級的訊息系統

1、點評 本文主要分享的是如何從零設計開發一箇中大型推送系統,因限於篇幅,文中有些鍵技術只能一筆帶過,建議有這方面興趣的讀者可以深入研究相關知識點,從而形成橫向知識體系。 本文適合有一定開發、架構經驗的後端程式設計師閱讀,文內個別技術點可能並非最佳實踐,但至少都是生動的實踐分享,至少能起到拋磚引玉的作用

NodeJs 實現IOS APNS 訊息服務

公司的專案要求接入伺服器自己接入原生的ISO 推送服務,不再接第三方的SDK,網上也有很多例子講解什麼是APNS ,如何獲取證書,怎麼接入,剛開始還是聽順利的,就是在獲取pem證書上面有些小問題,不過後來ios開發還是解決了,最後他自己做了一個獲取證書的總結。 我做的就是nodejs 服

設計一個百萬級的訊息系統

前言 首先遲到的祝大家中秋快樂。 最近一週多沒有更新了。其實我一直想憋一個大招,分享一些大家感興趣的乾貨。 鑑於最近我個人的工作內容,於是利用這三天小長假憋了一個出來(其實是玩了兩天

設計一個百萬級的訊息系統 | 併發程式設計網

前言 首先遲到的祝大家中秋快樂。 最近一週多沒有更新了。其實我一直想憋一個大招,分享一些大家感興趣的乾貨。 鑑於最近我個人的工作內容,於是利用這三天小長假憋了一個出來(其實是玩了兩天?)。 先簡單說下本次的主題,由於我最近做的是物聯網相關的開發工作,其中就不免會遇到和裝置的互動。 最主要的工作

使用EventSource實現頁面訊息 與 websocket 的區別

      HTML5有一個Server-Sent Events(SSE)功能,允許服務端推送資料到客戶端。(通常叫資料推送)。我們來看下,傳統的WEB應用程式通訊時的簡單時序圖: 現在Web App中,大都有Ajax,是這樣子: 基於資料推送是這樣的,當資料來源有新資料,它馬上傳送到客戶端,不需要等待

簡單頁面實時功能

首先需要去官網註冊賬號及應用,獲取到APPKEY和應用名 <!DOCTYPE html> <html> <head> <script type="text/javascript" src="http://cdn-hangzhou

使用websocket進行訊息服務

Websocket主要做訊息推送,簡單,輕巧,比comet好用 入門瞭解:https://www.cnblogs.com/xdp-gacl/p/5193279.html   /** * A Web Socket session represents a conversation bet

華為訊息服務(HMS Agent套件)一

       步驟 2  執行命令keytool -list -v -keystore <keystore-file>,按命令列提示進行操作。       <keystore-file>是為應用簽名檔案的完整路徑。 例如:C:\Program Files (x86)\Java\jdk1

開發訊息服務,基於Netty protobuf--fpush(含github原始碼)

開發訊息推送服務,基於Netty protobuf--fpush-含github原始碼 技術棧 程式碼簡介 系統架構 1.系統部署架構圖如下: 2. 移動客戶端鑑定許可權原理 3. server端推送

Amazon SNS產品詳情_SNS訊息服務

Amazon Web Services 誠聘精英。 Amazon Web Services (AWS) 是 Amazon.com 的一個充滿活力、不斷壯大的業務部門。我們現誠聘軟體開發工程師、產品經理、客戶經理、解決方案架構師、支援工程師、系統工程師以及設計師等人才。請訪問我

Amazon SNS價格_SNS訊息服務

Amazon SNS 無需預先支付費用,您可按照使用量付費。您根據釋出通知的數量、傳送通知的數量以及用於管理主題和訂閱的任何額外 API 呼叫的數量付費。傳送通知的費用因終端節點的型別而異。您可以從 SNS 免費套餐開始免費使用 SNS。 傳送一百萬條移動推送通知的花費是 1

H5+個實現訊息服務

網上看了幾篇教程都是比較老的版本了,根據前人的智慧,然後自己摸索了下,簡單幾步實現了在手機上推送自定義的訊息。 首先,在個註冊個賬號,開發階段使用個人註冊即可,個推註冊地址 註冊完進入配置頁面,對應用進行配置,框中的幾個地方要特別注意 註冊時會要求填一個包名,這個就是H5

搭建websocket訊息服務,必須要考慮的幾個問題

近年,不論是正在快速增長的直播,遠端教育以及IM聊天場景,還是在常規企業級系統中用到的系統提醒,對websocket的需求越來越大,對websocket的要求也越來越高。從早期對websocket的應用僅限於少部分功能和IM等特殊場景,逐步發展為追求支援高併發,百萬、千萬級每秒通訊的高可用websocket服

nodeJS一個簡單的(代理)web伺服器

前端獲取資料時經常遇見跨域問題,以前一直用nginx做反向代理。最近在用vuejs,發現webpack-dev-server的代理簡單好用。於是仿照寫了一個簡單的web伺服器,用於非webpack的專案。 1 const request = require('request'); 2 const

基於nodejs一個簡單的http/web伺服器

建立專案環境,執行下面的命令 cd d: mkdir webapp cd webapp npm install http npm install fs npm install querystring 目錄結構 服務端程式碼 app.js /** * we

用htmlcss製作一個簡單頁面

原始碼:<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>簡單頁面</title> <meta name="v

nodejs+socketio+redis 簡單訊息例項(一)

前段時間採用nodejs+socketio+redis做了個簡單的訊息推送例子,發出來與大家分享一下: 一、安裝nodejs伺服器 1、從Node.js官方網站下載:http://www.nodejs.org/#download;根據自己系統選擇下載wind

spring boot 整合activemq 進行服務訊息web頁面

最近公司的專案裡有需要服務端向web端實時推送訊息的需求,網上搜索了一番,有前端頁面通過定時任務向後臺傳送ajax請求重新整理,有使用第三方提供的訊息服務(GoEasy),前者因為會有很多請求是無用的,容易加大伺服器負荷造成宕機,後者現在收費了(免費的也只能用一