Nodejs和一个简单的web页面消息推送服务

前言:

英语能力有限,所以不能叫做纯翻译,大概比例是70%翻译,20%理解,10%自由发挥

原文:

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

简述:

用socket.io建立服务端和客户端的双向连接,当服务端的xml文件发生变化时,向客户端推送xml内容

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

在本文中我将向你展示如何使用nodejs和socket.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文件。




    Hello world!

最后你可以自由地创建你的前端页面client.html,当example.xml发生变化时会你的数据将会被推送。


    
    
        Push notification server
    
    
        
        
Try to change your xml data to update this content

【此处作者还提供了个视频,需要看,在youtube】

正是因为有socket.io才有了这个简单又跨平台的解决方案,我们在html页面和服务器间创建了一个双向连接,只有xml发生改变时才会推送新的数据,可以利用的技术包括新的websocket api甚至是回退到flash技术( 更多socket.io去这里)

下载教程

如果你喜欢这篇文章,你可以读我的 新文章——如何让你的Nodejs推送消息服务连接mysql数据库。


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

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


你可能感兴趣的:(web前端)