• workman使用手册1.0


    workman官网地址:高性能PHP应用容器 workerman

    1:把workman项目放到linux服务器后,需要启动你的php文件,才可以使用

            定位到项目根目录:例:cd /mnt/workman

            启动代码:php outin.php start -d

            停止代码:php outin.php stop

            以debug(调试)方式启动: php outin.php start

    2:workman服务端写法

    1. use Workerman\Worker;
    2. use Workerman\Timer;
    3. use Workerman\MySQL\Connection;
    4. use procedure\Attendance;
    5. require_once __DIR__ . '/vendor/autoload.php';
    6. $worker = new Worker('websocket://0.0.0.0:8088');
    7. Worker::$logFile = '/mnt/workman/log/outin.log'; //日志地址
    8. $worker->uidConnetions = [];
    9. $worker->onConnect = function($connection) use ($worker)
    10. {
    11. $connection->onWebSocketConnect = function($connection , $httpBuffer) use ($worker)
    12. {
    13. // 可以在这里判断连接来源是否合法,不合法就关掉连接
    14. // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket连接
    15. // if($_SERVER['HTTP_ORIGIN'] != 'https://www.workerman.net')
    16. // {
    17. // $connection->close();
    18. // }
    19. // onWebSocketConnect 里面$_GET $_SERVER是可用的
    20. // var_dump($_GET, $_SERVER);
    21. //前端传入的参数,可以根据type,company_uuid判断需要显示的链接有哪些
    22. $worker->uidConnetions[$connection->id]["connection"] = $connection;
    23. $worker->uidConnetions[$connection->id]["type"] = $_GET["type"];
    24. $worker->uidConnetions[$connection->id]["company_uuid"] = $_GET["company_uuid"];
    25. };
    26. };
    27. $worker->onClose = function ($connection) use ($worker)
    28. {
    29. if (isset($connection->id)) {
    30. unset($worker->uidConnetions[$connection->id]);
    31. }
    32. };
    33. // 进程启动后定时推送数据给客户端
    34. $worker->onWorkerStart = function($worker){
    35. //查表,有需要的,
    36. // file_put_contents("/mnt/workman/log/" .date("Ymd"). ".txt", date("Y-m-d H:i:s") . ":jin" .PHP_EOL, FILE_APPEND);
    37. $db = new Connection('mysql地址','3306', 'root', 'password', '表名'); //mysql链接信息
    38. $attend = new Attendance();
    39. Timer::add(1, function()use($worker, $db, $attend){
    40. //10s之内的数据
    41. $time = time() - 10;
    42. $time = date("Y-m-d H:i:s",$time);
    43. //$time = date("Y-m-d 00:00:00",$time);
    44. $infos = $db->query("SELECT student_userid,class_name,student_name,sign_time,id,company_uuid,status,photo_url FROM sign WHERE tui = '1' AND is_delete = '0' AND sign_time > '$time' GROUP BY student_userid ORDER BY id desc");
    45. //获取信息
    46. $attend_data = $attend->getAttendanceData($db);
    47. foreach($worker->connections as $connection) {
    48. $res = $worker->uidConnetions[$connection->id];
    49. file_put_contents("/mnt/workman/log/" .date("Ymd"). ".txt", date("Y-m-d H:i:s") . "type1:".$res["type"] .PHP_EOL, FILE_APPEND);
    50. //outin类型的,使用本回调
    51. if ($res["type"] == 'outin') {
    52. foreach ($infos as $v) {
    53. $company_uuid = $v["company_uuid"];
    54. $student_userid = $v["student_userid"];
    55. $imgurl = $db->single("SELECT imgurl FROM stu_face WHERE company_uuid = '$company_uuid' AND student_userid = '$student_userid'");
    56. if ($v["company_uuid"] == $res["company_uuid"]) {
    57. $arr = [
    58. "class_name"=>$v["class_name"],
    59. "student_name"=>$v["student_name"],
    60. "status"=>$v["status"],
    61. "photo_url"=>$imgurl,
    62. "sign_time"=>$v["sign_time"]
    63. ];
    64. //打印输出查询的数据
    65. file_put_contents("/mnt/workman/log/" .date("Ymd"). ".txt", date("Y-m-d H:i:s") . "xinxi:".json_encode($arr, true) .PHP_EOL, FILE_APPEND);
    66. //根据数据为已推送
    67. $db->query("UPDATE sign SET tui = '2' WHERE tui = '1' AND company_uuid = '$company_uuid' AND student_userid = '$student_userid'");
    68. $connection->send(json_encode($arr));
    69. }
    70. }
    71. }
    72. if ($res["type"] == 'banji') {
    73. $attend->banji($res, $attend_data["ban_infos"],$db,$connection);
    74. }
    75. }
    76. });
    77. };
    78. Worker::runAll();

    2:自动加载问题,参考:自动加载-workerman手册

            注:1:文件名是小写的,在使用命名空间的时候,也是使用小写

    2:在需要使用的时候,引入是这样的:

  • 相关阅读:
    拆解爱美客2022年上半年财报:盈利能力强、业绩增速却下滑,股东人数锐减三成
    深度学习之tf.keras.preprocessing.image_dataset_from_directory()函数
    mac 安装java1.8
    WinForm右键菜单的快键键设置
    实现一个通用的函数柯里化的函数
    Opencv-图像插值与LUT查找表
    python基本类型
    dmesg 崩溃分析
    Redis的缓存雪崩、缓存穿透、缓存击穿
    【c语言 】数组入门
  • 原文地址:https://blog.csdn.net/qq_16088377/article/details/134439895