求帮助解释一下代码

新鲜的菜鸟 2018-06-19 02:45:40
求帮忙解释一下,我这个是从APP端接收数据的代码,帮忙解释一下接收的数据是存在哪个数组里面的


<?php


use Workerman\Connection\AsyncTcpConnection;
use Workerman\Worker;

require 'workerman/Autoloader.php';

$androidClient = NULL;
$webClient = NULL;
$XV0 = $XV1 = 0;
$YV0= $YV1 = 0;

$XS0=$XS1=$YS0=$YS1 = 0;
$Xa0 = $Ya0 = 0;


// 创建一个Worker监听9090端口,使用websocket协议通讯
$ws_worker = new Worker("websocket://0.0.0.0:9090");

// 启动4个进程对外提供服务
$ws_worker->count = 1;


// 当收到客户端发来的数据后
$ws_worker->onMessage = function($connection, $data)
{
//这里用global的原因是:php是有作用域的,我们是在onMessage这个回调还是里操作外面的数组
//想要改变作用域外面的数组,就global一下
global $androidClient;
global $webClient;
global $XV0;
global $XV1;
global $YV0;
global $YV1;
global $XS0;
global $XS1;
global $YS0;
global $YS1;
global $Xa0;
global $Ya0;

global $Ax;
global $Ay;
global $Az;

global $pitch;
global $roll;
global $yaw;

global $Sx;
global $Sy;


// echo $data;
//验证客户端type
if(preg_match('/^type:(.*?)/isU',$data,$result)){ //代表是客户端认证

$type = $result[1];

if($type=="web"){ //必须是之前没有注册过

//存储新登录用户的数据
$webClient = $connection;
$webClient->send("connect success");
echo "web connect\n";

}
elseif ($type == "android") {
$androidClient = $connection;
echo "android connect\n";
}

}elseif(preg_match('/^msg:(.*?)/isU',$data,$msgset)){ //代表是客户端发送的普通消息
// echo $data + "\n";
if($webClient != NULL){ //必须是之前验证通过的客户端
//echo 'get msg:' . $msgset[1] .PHP_EOL; //这是为了演示,控制台打印信息
//数据格式:ax,ay,az,rx,ry,rz
//$aX =
$values = explode(";",$msgset[1]);


$Sx = $values[3];
$Sy = $values[4];


echo 'get msg:' . $msgset[1] ." [".$Sx ."] "." [".$Sy ."] ".PHP_EOL; //这是为了演示,控制台打印信息
$webClient->send( $Sx .";" . $Sy ); //发送数据给客户端

}
}

// 设置连接的onClose回调
$connection->onClose = function($connection) //客户端主动关闭
{
global $androidClient;
global $webClient;
global $XV1;
global $YV0;
global $YV1;
global $XS0;
global $XS1;
global $YS0;
global $YS1;
if($connection == $androidClient)
{
$androidClient = NULL;
$XV0 = $XV1 = 0;
$YV0= $YV1 = 0;

$XS0=$XS1=$YS0=$YS1 = 0;
echo "android closed\n";
}
elseif($connection == $webClient)
{
$webClient = NULL;
echo "web closed\n";
}

};
};

// 运行worker
Worker::runAll();
...全文
463 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayzen1988 2018-06-21
  • 打赏
  • 举报
回复

$webClient = $connection;
$webClient->send("connect success");//应该是通过这个发送数据

通过正则匹配$data的内容,做出不同的处理
你说的存在哪个数组里面,只能说在preg_match函数的第三个参数,//$result,$msgset

你自己可以细看下代码逻辑
xuzuning 2018-06-21
  • 打赏
  • 举报
回复
$Sx = $values[3];
$Sy = $values[4];

由于有
global $Sx;
global $Sy;

所以是全局变量,并非什么数组
新鲜的菜鸟 2018-06-20
  • 打赏
  • 举报
回复
引用 1 楼 zhangbin1988 的回复:

$ws_worker->onMessage = function($connection, $data)
//$data应该就是接收的数据
可以说一下接下来是存进了哪个数组,然后发出去的嘛 万分感谢
新鲜的菜鸟 2018-06-20
  • 打赏
  • 举报
回复
可以说一下接下来是存进了哪个数组,然后发出去的嘛 万分感谢
ayzen1988 2018-06-20
  • 打赏
  • 举报
回复

$ws_worker->onMessage = function($connection, $data)
//$data应该就是接收的数据

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧