start_websocket_server.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. use \Workerman\Worker;
  3. use \Workerman\Autoloader;
  4. // autoload
  5. require_once __DIR__ . '/../../Workerman/Autoloader.php';
  6. Autoloader::setRootPath(__DIR__);
  7. // create Websocket worker
  8. $ws_server = new Worker('Websocket://0.0.0.0:3636');
  9. $ws_server->name = 'SimpleChatWebSocket';
  10. $ws_server->count = 1;
  11. // @see http://doc3.workerman.net/worker-development/on-connect.html
  12. $ws_server->onConnect = function($connection)
  13. {
  14. // on WebSocket handshake
  15. $connection->onWebSocketConnect = function($connection)
  16. {
  17. $data = array(
  18. 'type' => 'login',
  19. 'time' => date('Y-m-d H:i:s'),
  20. // @see http://doc3.workerman.net/worker-development/id.html
  21. 'from_id' => $connection->id,
  22. );
  23. broad_cast(json_encode($data));
  24. };
  25. };
  26. // @see http://doc3.workerman.net/worker-development/on-message.html
  27. $ws_server->onMessage = function($connection, $data)use($ws_server)
  28. {
  29. $data = array(
  30. 'type' => 'say',
  31. 'content' => $data,
  32. 'time' => date('Y-m-d H:i:s'),
  33. // @see http://doc3.workerman.net/worker-development/id.html
  34. 'from_id' => $connection->id,
  35. );
  36. broad_cast(json_encode($data));
  37. };
  38. // @see http://doc3.workerman.net/worker-development/connection-on-close.html
  39. $ws_server->onClose = function($connection)
  40. {
  41. $data = array(
  42. 'type' => 'logout',
  43. 'time' => date('Y-m-d H:i:s'),
  44. // @see http://doc3.workerman.net/worker-development/id.html
  45. 'from_id' => $connection->id,
  46. );
  47. broad_cast(json_encode($data));
  48. };
  49. /**
  50. * broadcast
  51. * @param string $msg
  52. * @return void
  53. */
  54. function broad_cast($msg)
  55. {
  56. global $ws_server;
  57. //@see http://doc3.workerman.net/worker-development/connections.html
  58. foreach($ws_server->connections as $connection)
  59. {
  60. // @see http://doc3.workerman.net/worker-development/send.html
  61. $connection->send($msg);
  62. }
  63. }
  64. // 如果不是在根目录启动,则运行runAll方法
  65. if(!defined('GLOBAL_START'))
  66. {
  67. Worker::runAll();
  68. }