HttpServer.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. use Workerman\Connection\TcpConnection;
  3. use Workerman\Protocols\Http\Request;
  4. use Workerman\Protocols\Http\Response;
  5. use Workerman\Protocols\Http\ServerSentEvents;
  6. use Workerman\Timer;
  7. use Workerman\Worker;
  8. require_once __DIR__ . '/vendor/autoload.php';
  9. if (!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
  10. if (!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
  11. if (!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
  12. $worker = new Worker('http://0.0.0.0:8080');
  13. $worker->onMessage = function (TcpConnection $connection, Request $request) {
  14. match ($request->path()) {
  15. '/' => $connection->send('Hello Chance'),
  16. '/get' => $connection->send(json_encode($request->get())),
  17. '/post' => $connection->send(json_encode($request->post())),
  18. '/header' => $connection->send($request->header('foo')),
  19. '/setSession' => (function () use ($connection, $request) {
  20. $request->session()->set('foo', 'bar');
  21. $connection->send('');
  22. })(),
  23. '/session' => $connection->send($request->session()->pull('foo')),
  24. '/sse' => (function () use ($connection) {
  25. $connection->send(new Response(200, ['Content-Type' => 'text/event-stream'], "\r\n"));
  26. $i = 0;
  27. $timer_id = Timer::add(0.001, function () use ($connection, &$timer_id, &$i) {
  28. if ($connection->getStatus() !== TcpConnection::STATUS_ESTABLISHED) {
  29. Timer::del($timer_id);
  30. return;
  31. }
  32. if ($i >= 5) {
  33. Timer::del($timer_id);
  34. $connection->close();
  35. return;
  36. }
  37. $i++;
  38. $connection->send(new ServerSentEvents(['data' => "hello$i"]));
  39. });
  40. })(),
  41. '/file' => $connection->send(json_encode($request->file('file'))),
  42. default => $connection->send(new Response(404, [], '404 not found'))
  43. };
  44. };
  45. Worker::$command = 'start';
  46. Worker::runAll();