redis,nodejs,php,pub/sub 实战: 微信语音识别

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明socket.

2015年5月22日 20:20:20 星期五

效果:

这边对微信说话,  浏览器端及时显示语音识别的文字

注意:

在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明socket.io没有连接成功

代码:

node.js server端

 1 var module_path = '/usr/local/web/node/bin/node_modules/';
 2 var html = '<html> <head> <meta charset="utf-8"> <title>微信接口</title> <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script> <script src="http://cdn.bootcss.com/socket.io/1.3.5/socket.io.js"></script> </head> <body> <div id="voice"> 语音识别:<br><br> </div> <script type="text/javascript"> var voice = document.getElementById("voice"); var socket = io.connect("http://www.zhangzhibin.com:1337"); socket.on("hello", function(data){console.log(data); socket.emit("hello", {"status":"ok"}); }); socket.on("emit", function(data){var t = data+"<br>"; voice.innerHTML += t; socket.emit("emit", {"get":"data"}); }); </script> </body> </html>';
 3 //链接redis 
 4 var redis = require(module_path+'redis');
 5 var redis_client = redis.createClient(6379, '127.0.0.1');
 6 redis_client.auth('123456');
 7 redis_client.on('error', function(error){
 8     console.log('redis-error: ' + error);
 9 });
10 
11 //创建服务器
12 var http = require('http');
13 var url = require('url');
14 var fs = require('fs');
15 var ch = false;
16 var server = http.createServer(function (req, res) {
17     //获取请求参数
18     var objReqArg = url.parse(req.url, true).query;
19     ch = objReqArg.openid;
20     if (ch) {
21         redis_client.subscribe(ch, function(e){
22             console.log('channel: '+ ch);
23         });
24     };
25     //返回
26     res.writeHead(200, {'Content-Type': 'text/html'});
27     res.end(html);
28     
29 });
30 server.listen(1337, 'www.zhangzhibin.com');
31 
32 //创建服务器
33 var io = require(module_path + 'socket.io').listen(server);
34 io.sockets.on('connection', function(socket){
35     socket.on('hello', function(data){
36         console.log(data);
37     });
38     socket.emit('hello', function(data){
39         console.log(data);
40     });
41     redis_client.on('message', function(error, msg){
42         socket.emit('emit', msg);
43     });
44 });
45 
46 console.log('Server running at http://www.zhangzhibin.com:1337');

浏览器端html代码:

就是上边代码的第二行变量 var html='....'

 1 <html> 
 2     <head> 
 3         <meta charset="utf-8"> 
 4         <title>微信接口</title> 
 5         <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script> 
 6         <script src="http://cdn.bootcss.com/socket.io/1.3.5/socket.io.js"></script> 
 7     </head> 
 8     <body> 
 9     <div id="voice"> 语音识别:<br><br> </div> 
10     <script type="text/javascript"> 
11         var voice = document.getElementById("voice"); 
12         var socket = io.connect("http://www.zhangzhibin.com:1337"); 
13         socket.on("hello", function(data){ console.log(data);  socket.emit("hello", {"status":"ok"}); }); 
14         socket.on("emit", function(data){ var t = data+"<br>"; voice.innerHTML += t; socket.emit("emit", {"get":"data"}); }); 
15     </script> 
16     </body> 
17 </html>

微信端:

注意一点, 在语音回调函数中, 将语音识别的结果publish到某一个频道上即可

这时, 会触发上边第41行代码, 将文字发完浏览器端

下边是微信回调的代码:

 1     public function voice()
 2     {
 3         // 每次发送消息都会post 来一份签名相关的数据
 4         // $echostr = $this->checkSignature();
 5         // exit($echostr);
 6 
 7         preg_match('#<FromUserName><!\[CDATA\[([a-zA-Z0-9_]+)\]#', $GLOBALS['HTTP_RAW_POST_DATA'], $matches1);
 8         preg_match('#<Recognition><!\[CDATA\[([^\]]*)\]#', $GLOBALS['HTTP_RAW_POST_DATA'], $matches2);
 9         $openid = !empty($matches1[1]) ? $matches1[1] : '0';
10         $text = !empty($matches2[1]) ? $matches2[1] : '没听清...';
11 
12         $objRedis = iredis::getInstance();
13         $objRedis->publish($openid, $text);
14 
15     }

 

测试方法:

1. 关注我的微信公众号"xxx"

2. 发送消息"主播_username"

3. pc端打开 http://www.zhangzhibin.com/wechat/index/zhubolist

4. 点击你刚才输入的用户名, 进入你的对话页面

5. 对微信发送语音消息, 即可在刚才的浏览器页面看到语音识别结果

 

冷知识点:

php流处理

$_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input 

$content = $GLOBALS['HTTP_RAW_POST_DATA'];  // 需要php.ini设置

$content = file_get_contents('php://input'); // 不需要php.ini设置,内存压力小

目录
相关文章
|
2月前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
63 4
ly~
|
4月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
93 6
|
3月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
109 5
|
3月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
171 2
|
4月前
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
3月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
569 0
|
5月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
5月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
3月前
|
云安全 存储 小程序
PHP微信小程序解决方案PhpMall
PHP微信小程序解决方案PhpMall
49 0
|
5月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)