co_server.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. Co\Run(function () {
  3. $server = new Co\Http\Server("127.0.0.1", 9502, false);
  4. $server->handle('/websocket', function ($request, $ws) {
  5. $ws->upgrade();
  6. while (true) {
  7. $frame = $ws->recv();
  8. if ($frame === false) {
  9. echo "error : " . swoole_last_error() . "\n";
  10. break;
  11. } else if ($frame == '') {
  12. break;
  13. } else {
  14. if ($frame->data == "close") {
  15. $ws->close();
  16. return;
  17. }
  18. $ws->push("Hello {$frame->data}!");
  19. $ws->push("How are you, {$frame->data}?");
  20. }
  21. }
  22. });
  23. $server->handle('/', function ($request, $response) {
  24. $response->end(<<<HTML
  25. <h1>Swoole WebSocket Server</h1>
  26. <script>
  27. var wsServer = 'ws://127.0.0.1:9502/websocket';
  28. var websocket = new WebSocket(wsServer);
  29. websocket.onopen = function (evt) {
  30. console.log("Connected to WebSocket server.");
  31. };
  32. websocket.onclose = function (evt) {
  33. console.log("Disconnected");
  34. };
  35. websocket.onmessage = function (evt) {
  36. console.log('Retrieved data from server: ' + evt.data);
  37. };
  38. websocket.onerror = function (evt, e) {
  39. console.log('Error occured: ' + evt.data);
  40. };
  41. </script>
  42. HTML
  43. );
  44. });
  45. $server->start();
  46. });