一个简单的物联网平台的搭建(1)

C/S架构,由服务器,手机端,嵌入式组成。

这篇讲一下服务器,用的是阿里云轻量服务器,用的Workerman框架,Workerman详情http://doc.workerman.net/

服务器的防火墙规则要记得设置一下,不然设备是连不上的。

服务器代码是用php写的,主要完成的功能是收发数据。

贴下代码

//创建一个Worker监听10004端口
$worker = new Worker("tcp://0.0.0.0:10004");
//启动1个进程对外服务
$worker->count = 1;
// 新增加一个属性,用来保存客户端的uid
$worker->uidConnections = array();

//客户端发来消息执行的回调函数
//data数据,connection连接
//domojin
$worker->onMessage = function($connection, $data)
{
    //全局变量
    global $worker;
    // 判断当前客户端是否已经验证,即是否设置了uid
    if(!isset($connection->uid))
    {
        //没验证的话把第一个包当做uid
        $connection->uid = $data;
        $worker->uidConnections[$connection->uid] = $connection;
               return $connection->send('login success, your uid is ' . $connection->uid);
    }
    //将data以':'分割成recv_uid,message
    list($recv_uid, $message) = explode(':', $data);
    if($recv_uid == 'all')
    {
    //向所有客户端发送接收到的数据
        broadcast($message);
    }
    else
    {
        sendMessageByUid($recv_uid, $message);
    }
    //将客户端发来的数据存入text.txt文件中
    file_put_contents('text.txt',$data);
};

//broadcast($message)
// 向所有验证的用户推送数据
//domojin
function broadcast($message)
{
   global $worker;
   foreach($worker->uidConnections as $connection)
   {
        $connection->send($message);
   }
}
//sendMessageByUid($uid, $message)
//对指定的uid客户端推送数据
//domojin
function sendMessageByUid($uid, $message)
{
    global $worker;
    if(isset($worker->uidConnections[$uid]))
    {
        $connection = $worker->uidConnections[$uid];
        $connection->send($message);
    }
}

 

 

 

 

 

你可能感兴趣的:(一个简单的物联网平台的搭建(1))