idcolWss.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. use Workerman\Worker;
  3. require_once __DIR__ . '/Autoloader.php';
  4. require_once './Lib/mysql/src/Connection.php';
  5. use \Workerman\Lib\Timer;
  6. $ws_worker = new Worker("websocket://0.0.0.0:8844");
  7. // global $clientArr;
  8. // $clientArr =[];
  9. $ws_worker->onWorkerStart = function($ws_worker)
  10. {
  11. // 将db实例存储在全局变量中(也可以存储在某类的静态成员中)
  12. global $websocketDB;
  13. $websocketDB = new \Workerman\MySQL\Connection('rm-wz98r5cn33zq4ou980o.mysql.rds.aliyuncs.com', '3306', 'idcol20', 'idcol@1234', 'idcol');
  14. Timer::add(0.5, function()use($ws_worker){
  15. // global $clientArr;
  16. global $websocketDB;
  17. $connections = $ws_worker->connections;
  18. // var_dump($connections);
  19. $data = $websocketDB->select('id,client,msg')->from('message')->query();
  20. if (!empty($data)) {
  21. foreach ($data as $v) {
  22. if (!empty($connections[$v['client']])) $connections[$v['client']]->send($v['msg']);
  23. $websocketDB->query("DELETE FROM `message` WHERE id='{$v['id']}'");
  24. }
  25. }
  26. });
  27. };
  28. // 启动1个进程对外提供服务
  29. $ws_worker->count = 1;
  30. // 客户端连接回调
  31. $ws_worker->onConnect = function($connection)
  32. {
  33. // global $clientArr;
  34. // 标记连接的客户端
  35. // $key=uniqid();
  36. $key = $connection->id;
  37. $data = array('code'=>'0000','msg'=>'操作成功','data'=>['clientid'=>$key,'status'=>1]);
  38. $connection->send(json_encode($data));
  39. // $clientArr[$key] = $connection;
  40. };
  41. // 客户端断开连接
  42. // $ws_worker->onClose = function($connection)
  43. // {
  44. // global $clientArr;
  45. // if (!empty($clientArr)) {
  46. // foreach ($clientArr as $k => $v) {
  47. // if ($v == $connection) {
  48. // unset($clientArr[$k]);
  49. // break;
  50. // }
  51. // }
  52. // }
  53. // };
  54. // 运行worker
  55. Worker::runAll();