文 | huazai123
知晓程序(微信号 zxcx0101)今天带来的,是基于「药顾问」微信小程序项目的 socket 客服模块搭建过程。
环境准备
1. 搭建 HTTPS 和 WSS 环境
由于微信规定,白名单域名不能携带端口信息,我们建议,开发者使用 NginX 进行代理转发,使其支持微信白名单域名的要求。
2. 定义前后端通信 JSON 协议
其中,token
是用来验证消息来源合法性的,fd
为当前 socket 连接资源 ID,from
为对方 socket 连接资源 ID,cmd
用于定义当前操作。
聊天系统搭建
1. 服务端
采用 TP5 和 swoole 扩展,并新建了一个 socket 模块,用于处理 socket 请求。
目录结构如下:
分为服务端 server.php
和客户端 client.php
,服务端以 cli
形式运行。具体代码请参考 swoole 源码包中的 SSL 样例。
运行命令如下(先切换到服务器程序代码的public目录 ):
客户端其实是一个 web 端的 websocket,源码包中同样有提供样例,可供大家参考。
2. 小程序端
我们需要简单封装微信提供的 socket 接口,用于处理连接成功、发送消息、连接失败自动重连等操作。
目录结构如下:
发送方法封装参考:
3. 提升 cli
程序稳定性
编写 shell 脚本如下:
启用 crontab:
加入两行:
注意事项
如果使用 TP5 的帮助函数模块出现下面的错误,是数据库连接过期导致。
建议大家将连接过期时间设置得更长,但即使这样,总有过期的时候。所以我们推荐使用 MongoDB。
另外,微信小程序真机环境不予许指定端口,那上面的服务器配置就没有什么用,解决办法是:停用 Apache 的 SSL 模块,改用 NginX 作为反向代理。
如果要用 NginX 作为反向代理,会遇到会话过期的问题。我们有两个解决办法:
这两种办法都会增加服务器的负担,大家可以根据自己情况进行选择,我们建议采用后一种方法。
原文地址:
http://www.jianshu.com/p/26479d3892ac