dream-meng
Tcp.php
<?php namespace server; use \Swoole\Coroutine\Channel; require_once \'Pdo.php\'; class Tcp{ protected $number = 5; //数据包长度 protected $host = \'0.0.0.0\'; //监听对应外网的IP 0.0.0.0监听所有ip protected $port = 9502; //监听端口号 protected $config = array( //数据库配置 \'db_port\' => 3306, \'db_host\' => \'\',  //地址 \'db_name\' => \'\',  //库名 \'db_pass\' => \'\',  //密码 \'db_user\' => \'\',  //用户名 \'db_prefix\' => \'\', //表前缀 ); public function __construct(){ //创建tcp服务器对象,监听0.0.0.0:9678端口 $server = new \Swoole\Server($this->host, $this->port); //设置参数 //如果业务代码是全异步 IO 的,worker_num设置为 CPU 核数的 1-4 倍最合理 //如果业务代码为同步 IO,worker_num需要根据请求响应时间和系统负载来调整,例如:100-500 //假设每个进程占用 40M 内存,100 个进程就需要占用 4G 内存 $server->set(array( \'worker_num\' => 10, //设置启动的worker进程数。【默认值:CPU 核数】 \'max_request\' => 1000, //设置每个worker进程的最大任务数。【默认值:0 即不会退出进程】 \'daemonize\' => 1, //开启守护进程化【默认值:0,守护进程:1】 \'ssl_cert_file\' => \'\', //证书位置 \'ssl_key_file\' => \'\', //秘钥位置 \'heartbeat_idle_time\' => 180, // 表示一个连接如果180秒内未向服务器发送任何数据,此连接将被强制关闭 \'heartbeat_check_interval\' => 18, // 表示每18秒遍历一次 )); //监听连接进入事件 $server->on(\'Connect\', function ($server, $fd) { echo "Client: 设备FD编号:{$fd} 设备已连接.\n"; }); //监听数据接收事件 $server->on(\'Receive\', function ($server, $fd, $reactor_id, $data) { //实例化类 $pdo = new Pdo($this->config); //加入log file_put_contents(\'./TCP.log\', \'[\' . date(\'Y-m-d H:i:s\') . \']\' . var_export($data,true) . PHP_EOL,FILE_APPEND);
        var_dump($data);
       $table = \'\';   //表名
            $keys = [\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\'];  //字段名

            $val = "(".implode(\',\', array_fill(0, count([$data[0],$data[1],$data[3],$data[2],$data[4],$data[5],$data[6],$data[7],$data[8],$data[9]]), \'?\')).")";

            /*
        * 数据添加示例 * @return string $table 表名 * @return array $keys 字段 * @return array $data 数据 * @return string $val 占位 * */ $pdo->Insert($table,$keys,$data,$val);return; }); //监听连接关闭事件 $server->on(\'Close\', function ($server, $fd) { //实例化类 $pdo = new Pdo($this->config); $pdo->Offline($fd); echo "Client: 设备FD编号:{$fd} 设备已断开连接.\n"; }); //启动服务器 $server->start(); } } new Tcp();
pdo.php
<?php

namespace server;
use JPush\Client as JPush;      //激光推送    
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use function PHPSTORM_META\type;

class Pdo{

    // 数据库表名
    protected $table;

    // 数据库主键
    protected $primary = \'id\';

    //表前缀
    protected $prefix = \'\';

    // WHERE和ORDER拼装后的条件
    private $filter = array();

    //PDO
    private $pdo;

    //PDOStatement
    private $Statement;

    //PDO链接数据库
    public function __construct($config)
    {
        class_exists(\'PDO\') or exit("not found PDO");

        try{
            $this->pdo = new \PDO("mysql:host=" . $config[\'db_host\'] . ";port=" . $config[\'db_port\'] . ";dbname=" . $config[\'db_name\'], $config[\'db_user\'], $config[\'db_pass\']);
        }catch(PDOException $e){
            //数据库无法链接,如果您是第一次使用,请先配置数据库!
            exit($e->getMessage());
        }

        $this->prefix = $config[\'db_prefix\'];
        $this->pdo->exec("SET NAMES UTF8");
    }

  //使用类请引入对应Composer安装包路径
  //如:require_once(dirname(dirname(dirname(dirname(__FILE__)))).\'/vendor/autoload.php\');
/*    * 数据插入 * @return string $table 表名 * @return array $keys 字段 * @return array $value 数据 * @return string $val 占位 * */ public function Insert($table = \'\',$keys = [],$values = [],$val = \'\'){ try{ if (empty($values) or $val == \'\'){ return; } $this->pdo->beginTransaction(); $sql = $this->pdo->prepare("insert into $table (".implode(\',\',$keys).") values $val"); // foreach($values as &$row) { $sql->execute($values); // } $this->pdo->commit(); }catch (Exception $e){ //加入log file_put_contents(\'./swoole.log\', \'[\' . date(\'Y-m-d H:i:s\') . \']\' . var_export($e->getMessage(),true) . PHP_EOL,FILE_APPEND); return false; } } //设备下线 public function Offline($fd = \'\'){     try{
    }
catch (Exception $e){ //加入log file_put_contents(\'./swoole.log\', \'[\' . date(\'Y-m-d H:i:s\') . \']\' . var_export($e->getMessage(),true) . PHP_EOL,FILE_APPEND); return false; } }   //设备上线 public function Online($fd = \'\'){     try{
           }
catch (Exception $e){ //加入log file_put_contents(\'./swoole.log\', \'[\' . date(\'Y-m-d H:i:s\') . \']\' . var_export($e->getMessage(),true) . PHP_EOL,FILE_APPEND); return false; } }

 

分类:

技术点:

相关文章: