快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

普罗旺斯的梦 2019-06-29

项目说明
1.基于微信公众号的即时聊天室(微信群聊),通过在公众号里回复“聊天”文字获取系统地址,通过网页授权获取个人信息,通过微信分享进行传播。
2.该系统主要有3个页面:创建聊天、聊天记录、聊天页面。
3.使用redis数据库存储数据;使用socket.io实现websocket协议;前端页面使用弹性布局
4.可以发送文字、图片、语音(使用微信jssdk提供的录音功能),使用ffmpeg把amr转码成mp3;

看看系统
公众号入口:

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

创建聊天、聊天记录:

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

主聊天界面:

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

分享:

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

前提物料
1.微信测试公众号
2.内网穿透(也可以使用真实的服务器)
3.预先要安装、启动redis数据库、安装ffmpeg服务

websocket协议
websocket协议能够让服务器和浏览器实现全双工通信(双方可以互推消息)。具体的协议细节大家可以在网上搜索学习,这里不说。我们先说说,在websocket协议出现之前我们是怎样实现即时通信的?
在websocket以前,我是借助http来实现伪即时通信。
1.我们知道http1.1是无状态的,它只会响应来自客户端的请求;
2.我们可以非常轻松的捕获浏览器的动作、可以与服务器发生交互(ajax);但服务器发生一个动作,却是无法主动通知客服端的。
基于上面2点,http无法轻松地实现即时通信,但我们通常使用长轮询或长连接来实现(非常耗性能或浪费性能)。
长轮询:客户端定时发送http请求,看是否有新消息
长连接:客户端只请求一次,服务器一直保持连接

在nodejs中,我们使用socket.io来实现websocket协议
socket.io官方地址:https://socket.io/;里面有结合express.js的实现例子。
我们这个项目的使用逻辑:
服务端:
快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

connection事件:监听连接事件
disconnecting:将要断开连接事件
emit():触发事件的方法

客户端:
<script type="text/javascript" src='/socket.io/socket.io.js'></script>

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

socket.io提供了很多事件和方法,大家可以通过socket.io官网进行学习。

项目代码:
目录结构:

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

ffmpeg--ffmpeg程序
stattic--根目录

快速学习nodejs系列:收官实战篇-基于微信公众号、Nodejs的聊天室

audio--语音文件存放目录
upload--上传的图片目录

代码:https://github.com/chenhengji...

从github下载源码后,npm install 下载所要用模块,还要下载ffmpeg、redis。
启动 node app.js。在微信上即可实现聊天系统。

相关推荐

普罗旺斯的梦 / 0评论 2019-11-04