一、需求分析
开发一个项目微信小程序享寄存,软硬件结合,软硬件通信以前没有做过,网上的资料也很少,踩了不少的坑,特此记录一下。首先硬件和服务器建立一个socket长链接,前端微信小程序给服务器,发出命令给服务器,开锁,服务器如何通知客户端呢?
二、解决方案
在硬件客户端和服务器建立链接时,同时开启一个内部端口,进行监听
三、代码实现
start.php代码
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/12/30
* Time: 23:30
*/
namespace app\push\controller;
use app\api\model\User;
use app\common\model\Box;
use app\common\model\Chest;
use GatewayWorker\Gateway;
use My\RedisPackage;
use think\Cache;
use think\Db;
use think\Log;
use think\worker\Server;
class Worker extends Server
{
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
$inner_text_worker = new \Workerman\Worker('text://0.0.0.0:5678');
$inner_text_worker->onMessage = function($connection, $buffer)
{
// $data数组格式,里面有uid,表示向那个uid的页面推送数据
$data = json_decode($buffer, true);
$uid = $data['uid'];
$openArr = config('lock.open');
$index = $data['index'];
// 通过workerman,向uid的页面推送数据
$ret = $this->sendMessageByUid($uid, self::hexToString($openArr[$index]));
// 返回推送结果
$connection->send($ret ? 'ok' : 'fail');
};
// ## 执行监听 ##
$inner_text_worker->listen();
}
/**
* 收到信息
* @param $connection
* @param $data
*/