swoole4 配置及简单使用

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; } }

 

posted @ 2021-04-21 19:03  祈愿仙帝  阅读(651)  评论(0编辑  收藏  举报