Nodejs和一个简单的web页面消息推送服务
来源:互联网 发布:手机pdf朗读软件 编辑:程序博客网 时间:2024/05/01 10:13
前言:
英语能力有限,所以不能叫做纯翻译,大概比例是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 requestio.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: gianluca.guarini@gmail.com * 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页面消息推送服务
- 基于nodejs和activeMQ的消息推送
- Nodejs做web服务器的一个简单逻辑和实现
- mqtt消息推送-推送服务简单实现
- 一个简单的nodejs web服务器
- 建立和部署一个最简单的Web服务
- nodejs 利用express框架 创建一个简单的web项目
- 利用 nodeJS 搭建一个简单的Web服务器
- 理解一个简单的Web服务界面
- 如何用 Nodejs 分析一个简单页面
- nodejs向客户端推送消息
- 基于webservice的邮件消息推送服务
- APNS提供了两项基本的服务:消息推送和反馈服务
- 构建基于redis+gearman+nodejs 的消息推送系统
- [友盟推送]谈谈消息推送服务的"送达率"
- WindowsPhone消息推送服务
- WindowsPhone消息推送服务
- 小米消息推送服务
- myeclipse与eclipse的常用快捷键
- 查看mysql版本信息
- 数组:Remove Element&Merge Sorted Array&First Missing Positive
- SQL SERVER 2012创建数据库,使用数据库以及建表
- 1024程序员节,程序员要防治哪些职业病?
- Nodejs和一个简单的web页面消息推送服务
- 转载-局部图像特征描述的综述-讲了一些很新的局部特征的基本特点
- Wpa cli使用
- 谈C#中的Delegate
- C# 继承、多态
- C#定义类
- Labview 同步
- C#异常处理
- Kafka协议分析