socket.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace think;
  3. // 加载基础文件
  4. require __DIR__ . '/thinkphp/base.php';
  5. // 应用初始化
  6. Container::get('app')->path(__DIR__ . '/application/')->initialize();
  7. use Workerman\Worker;
  8. use PHPSocketIO\SocketIO;
  9. use Workerman\Protocols\Http\Request;
  10. use Workerman\Connection\TcpConnection;
  11. // io
  12. global $senderIO;
  13. // PHPSocketIO服务
  14. $senderIO = new SocketIO(6530);
  15. $senderIO->on('connection', function($socket) {
  16. $socket->on('disconnect', function () use($socket) {
  17. });
  18. });
  19. // 当$sender_io启动后监听一个http端口,通过这个端口可以给任意uid或者所有uid推送数据
  20. $senderIO->on('workerStart', function(){
  21. // 监听一个http端口
  22. $inner_http_worker = new Worker('http://0.0.0.0:6531');
  23. // 当http客户端发来数据时触发
  24. $inner_http_worker->onMessage = function(TcpConnection $http_connection, Request $request){
  25. global $senderIO;
  26. $post = $request->post();
  27. $post = $post ? $post : $request->get();
  28. // 推送处理
  29. if (!empty($post )){
  30. $senderIO->emit('message', $post);
  31. return $http_connection->send('ok');
  32. }
  33. return $http_connection->send('fail');
  34. };
  35. // 执行监听
  36. $inner_http_worker->listen();
  37. });
  38. Worker::runAll();