首页 » 网站推广 » php和硬件通信技巧_基于Web实现远程与硬件交互

php和硬件通信技巧_基于Web实现远程与硬件交互

duote123 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

1.用户利用微信扫描二维码

2.后台匹配干系数据,并存储用户信息,终极返回给用户当前柜子当前状态

php和硬件通信技巧_基于Web实现远程与硬件交互

3.用户选择“开柜”指令,进行存取物品

php和硬件通信技巧_基于Web实现远程与硬件交互
(图片来自网络侵删)
需求剖析

1.实现跟硬件进行数据交互,利用TCP/IP 长连接,意味着,我们要有一个TCP做事器,TCP做事器一方面接管用户发过来的干系要求指令,另一方面完成发送指令给指定硬件这一操作。

2.除了TCP 做事器我们还须要一个 Websocket 做事器,也有两个功能,一方面接管客户端发送的指令,另一方面处理转发用户指令给TCP做事器。

### 功能实现

TCP 做事器,Websocket 做事器 利用相对成熟的 Workman 实现。

> Workerman是一款纯PHP开拓的开源高性能的PHP socket 做事器框架。
被广泛的用于手机app、移动通讯,微信小程序,手游做事端、网络游戏、PHP谈天室、硬件通讯、智能家居、车联网、物联网等领域的开拓。
支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。
拥有异步Mysql、异步Redis、异步Http、异队伍列等浩瀚高性能组件。

GatewayWorker 目录构造

├── Applications // 这里是所有开拓者运用项目

│ └── YourApp // 个中一个项目目录,目录名可以自定义

│ ├── Events.php // 开拓者只须要关注这个文件

│ ├── start_gateway.php // gateway进程启动脚本,包括端口号等设置

│ ├── start_businessworker.php // businessWorker进程启动脚本

│ └── start_register.php // 注册做事启动脚本

├── start.php // 全局启动脚本,此脚本会依次加载Applications/项目/start_.php启动脚本

└── vendor // GatewayWorker框架和Workerman框架源码目录,此目录开拓者不用关心

1. 首先我们 `Applications ` 复制两份 `YourApp` 目录下的文件,此时我们的目录构造该当是这样的

├── Applications // 这里是所有开拓者运用项目

│ └── TcpServer // 个中一个项目目录,目录名可以自定义

│ ├── Events.php // 开拓者只须要关注这个文件

│ ├── start_gateway.php // gateway进程启动脚本,包括端口号等设置

│ ├── start_businessworker.php // businessWorker进程启动脚本

│ └── start_register.php // 注册做事启动脚本

│ └── WSServer

│ ├── Events.php

│ ├── start_gateway.php

│ ├── start_businessworker.php

│ └── start_register.php

├── start.php // 全局启动脚本,此脚本会依次加载Applications/项目/start_.php启动脚本

└── vendor // GatewayWorker框架和Workerman框架源码目录,此目录开拓者不用关心

2. 修正以及配置 `TCPServer`,`start_register.php` 下我们不做任何修正,但须要把稳的是register 必须是text协议

// register 必须是text协议

$register = new Register('text://0.0.0.0:1238');

2.修正 `start_gateway.php`

// gateway 进程,这里利用 TCP 协议,可以用telnet测试

$gateway = new Gateway(\"大众tcp://0.0.0.0:8282\"大众);

// gateway名称,status方便查看

$gateway->name = 'TcpGateway';

// gateway进程数

$gateway->count = 4;

// 本机ip,分布式支配时利用内网ip

$gateway->lanIp = '127.0.0.1';

// 内部通讯起始端口,如果$gateway->count=4,起始端口为4000

// 则一样平常会利用4000 4001 4002 4003 4个端口作为内部通讯端口

$gateway->startPort = 2900;

// 做事注册地址

$gateway->registerAddress = '127.0.0.1:1238';

3.修正 `start_businessworker.php`

// bussinessWorker 进程

$worker = new BusinessWorker();

// worker名称

$worker->name = 'TcpBusinessWorker';

// bussinessWorker进程数量

$worker->count = 4;

// 做事注册地址

$worker->registerAddress = '127.0.0.1:1238';

4.根据上面的操作,我们修正`WSServer`目录下的文件,这个修正跟上面一样的,但是要把稳的是,两个运用该当是不用的端口,以是须要修正的地方有两个,`start_gateway`下的端口,还有`start_register`端口。




两个运用下register 和 Gateway 端口一定不一致!


好了,到目前为止,我们已经完成了两个做事器的创建,那么我们两个做事器之间如何数据共享呢?答案很大略,我们在ws做事下创建一个tcp 客户端即可,让tcp 客户端与我们tcp 做事器连接就可以,然后通过tcp 客户端直接发送干系数据给tcp做事器就可以,当然并不是所有数据都是通过这样的办法共享的,我们其他信息还是通过共用一个数据库来共享的。
干系代码如下:

public static function onConnect($client_id)

{

// 向所有人发送

$host = \"大众127.0.0.1\"大众;

$port = 8282;

global $socket;

if (empty($socket)) {

$socket = TcpClient::getInstace()->connect($host, $port);

Gateway::sendToClient($client_id, \公众$client_id welcome\n\r\公众);

}

}

public static function onMessage($client_id, $message)

{

if ($GLOBALS['socket']) {

// 数据指令解包

$message_arr = str_split(str_replace(' ', '', trim($message)), 2);

$cmd=null;

for ($j = 0; $j < count($message_arr); $j++) {

//socket_write($GLOBALS['socket'], bin2hex($message_arr[$j]));

socket_write($GLOBALS['socket'],chr(hexdec($message_arr[$j])));

}

}

}

好了,截止目前我们就完成了做事端事情,当然客户端只是大略的创建一个ws连接就好。

标签:

相关文章

轮回界说变量php技巧_PHP 轮回While 轮回

PHP 循环在您编写代码时,您常常须要让相同的代码块一次又一次地重复运行。我们可以在代码中利用循环语句来完成这个任务。在 PHP...

网站推广 2024-12-15 阅读0 评论0

用php盘算面积技巧_PHP版的简单计算器

题目是:功能:定义长方形的宽,和长。显示长方形的面积。步骤:1. 声明两个变量,表示长方形的宽,和高2. 利用长方形面积公式3....

网站推广 2024-12-15 阅读0 评论0