如何把消息 通过nodejs 发送给客户端

JavaScript010

如何把消息 通过nodejs 发送给客户端,第1张

后端推送数据的解决方案有很多,比如轮询、Comet、WebSocket。

1. 轮询对于后端来说开发成本最低,就是按照传统的方式处理Ajax请求并返回数据,在学校的时候实验室的项目一直都采用轮询,因为它最保险也最容易实现。但轮询带来的通信资源的浪费是无法忽视的,无论数据是否改变,都照常发送请求并响应,而且每次HTTP请求都带有很长的头部信息。

2. Comet的概念是长连接,客户端发送请求后,后端将连接保持下来,直到连接超时或后端返回数据时再重新建立连接,有效的将通信资源转移到了服务器上,实际消耗的是服务器资源。

3. WebSocket是HTML5提供的一种全双工通信技术,通过“握手”实现客户端与服务器之间的通信,实时性好,携带的头部也较小

安装

如果你使用node进行开发,那么安装很简单:

npm install weixin-api

表达

如果你需要使用express开发微信公众平台应用,那么首先安装express

npm install express -g

创建应用

express myweixin

cd myweixin修改package.json,添加对weixin-api的依赖

{

"name": "application-name",

"version": "0.0.1",

"private": true,

"scripts": {

"start": "node app.js"

},

"dependencies": {

"express": "3.1.1",

"jade": "*",

"xml2js" : "0.2.6",

"weixin-api" : ">=0.1.6"

}

}

然后执行

npm install

特征

token校验

消息推送:文本消息,图片消息,地理位置消息,链接消息,事件推送

消息回复:文本消息,音乐消息,图文消息

链接

微信API For Node.js

例子

var express = require('express'),

weixin = require('weixin-api'),

app = express()

// 解析器

app.use(express.bodyParser())

//app.use(xmlBodyParser)

// 接入验证

app.get('/', function(req, res) {

// 签名成功

if (weixin.checkSignature(req)) {

res.send(200, req.query.echostr)

} else {

res.send(200, 'fail')

}

})

// config

weixin.token = '你的token'

// 监听文本消息

weixin.textMsg(function(msg) {

console.log("textMsg received")

console.log(JSON.stringify(msg))

var resMsg = {}

switch (msg.content) {

case "文本" :

// 返回文本消息

resMsg = {

fromUserName : msg.toUserName,

toUserName : msg.fromUserName,

msgType : "text",

content : "这是文本回复",

funcFlag : 0

}

break

case "音乐" :

// 返回音乐消息

resMsg = {

fromUserName : msg.toUserName,

toUserName : msg.fromUserName,

msgType : "music",

title : "音乐标题",

description : "音乐描述",

musicUrl : "音乐url",

HQMusicUrl : "高质量音乐url",

funcFlag : 0

}

break

case "图文" :

var articles = []

articles[0] = {

title : "PHP依赖管理工具Composer入门",

description : "PHP依赖管理工具Composer入门",

picUrl : "http://weizhifeng.net/images/tech/composer.png",

url : "http://weizhifeng.net/manage-php-dependency-with-composer.html"

}

articles[1] = {

title : "八月西湖",

description : "八月西湖",

picUrl : "http://weizhifeng.net/images/poem/bayuexihu.jpg",

url : "http://weizhifeng.net/bayuexihu.html"

}

articles[2] = {

title : "「翻译」Redis协议",

description : "「翻译」Redis协议",

picUrl : "http://weizhifeng.net/images/tech/redis.png",

url : "http://weizhifeng.net/redis-protocol.html"

}

// 返回图文消息

resMsg = {

fromUserName : msg.toUserName,

toUserName : msg.fromUserName,

msgType : "news",

articles : articles,

funcFlag : 0

}

}

weixin.sendMsg(resMsg)

})

// 监听图片消息

weixin.imageMsg(function(msg) {

console.log("imageMsg received")

console.log(JSON.stringify(msg))

})

// 监听位置消息

weixin.locationMsg(function(msg) {

console.log("locationMsg received")

console.log(JSON.stringify(msg))

})

// 监听链接消息

weixin.urlMsg(function(msg) {

console.log("urlMsg received")

console.log(JSON.stringify(msg))

})

// 监听事件消息

weixin.eventMsg(function(msg) {

console.log("eventMsg received")

console.log(JSON.stringify(msg))

})

// Start

app.post('/', function(req, res) {

// loop

weixin.loop(req, res)

})

app.listen(3000)

许可证

麻省理工学院许可证(麻省理工学院)版权所有(C)2012 Jeremy Wei

特此授权,免费的,任何人获得本软件和相关文档文件(“软件”),交易软件没有限制,包括无限制的使用的权利,复制,修改,合并,出版,分发,许可,和/或销售的软件副本,并允许个人软件提供这样做,符合下列条件:上述版权声明和本许可通知应包含在软件的所有副本或实质性部分中。

本软件提供的“原样”,没有任何形式的保证,明示或暗示,包括但不限于适销性的保证,为特定的目的和非侵权性的健身。在任何情况下,作者或版权持有人应承担任何索赔,损害赔偿或其他责任,无论是在合同,侵权或以其他方式产生的,出于或与软件或使用或其他交易软件的行动。