start_websocket_server.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * This file is part of workerman.
  4. *
  5. * Licensed under The MIT License
  6. * For full copyright and license information, please see the MIT-LICENSE.txt
  7. * Redistributions of files must retain the above copyright notice.
  8. *
  9. * @author walkor<walkor@workerman.net>
  10. * @copyright walkor<walkor@workerman.net>
  11. * @link http://www.workerman.net/
  12. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  13. */
  14. use \Workerman\Worker;
  15. use \Workerman\Autoloader;
  16. // autoload
  17. require_once __DIR__ . '/../../Workerman/Autoloader.php';
  18. Autoloader::setRootPath(__DIR__);
  19. // create Websocket worker
  20. $ws_server = new Worker('Websocket://0.0.0.0:3636');
  21. $ws_server->name = 'SimpleChatWebSocket';
  22. $ws_server->count = 1;
  23. // @see http://doc3.workerman.net/worker-development/on-connect.html
  24. $ws_server->onConnect = function($connection)
  25. {
  26. // on WebSocket handshake
  27. $connection->onWebSocketConnect = function($connection)
  28. {
  29. $data = array(
  30. 'type' => 'login',
  31. 'time' => date('Y-m-d H:i:s'),
  32. // @see http://doc3.workerman.net/worker-development/id.html
  33. 'from_id' => $connection->id,
  34. );
  35. broad_cast(json_encode($data));
  36. };
  37. };
  38. // @see http://doc3.workerman.net/worker-development/on-message.html
  39. $ws_server->onMessage = function($connection, $data)use($ws_server)
  40. {
  41. $data = array(
  42. 'type' => 'say',
  43. 'content' => $data,
  44. 'time' => date('Y-m-d H:i:s'),
  45. // @see http://doc3.workerman.net/worker-development/id.html
  46. 'from_id' => $connection->id,
  47. );
  48. broad_cast(json_encode($data));
  49. };
  50. // @see http://doc3.workerman.net/worker-development/connection-on-close.html
  51. $ws_server->onClose = function($connection)
  52. {
  53. $data = array(
  54. 'type' => 'logout',
  55. 'time' => date('Y-m-d H:i:s'),
  56. // @see http://doc3.workerman.net/worker-development/id.html
  57. 'from_id' => $connection->id,
  58. );
  59. broad_cast(json_encode($data));
  60. };
  61. /**
  62. * broadcast
  63. * @param string $msg
  64. * @return void
  65. */
  66. function broad_cast($msg)
  67. {
  68. global $ws_server;
  69. //@see http://doc3.workerman.net/worker-development/connections.html
  70. foreach($ws_server->connections as $connection)
  71. {
  72. // @see http://doc3.workerman.net/worker-development/send.html
  73. $connection->send($msg);
  74. }
  75. }
  76. // 如果不是在根目录启动,则运行runAll方法
  77. if(!defined('GLOBAL_START'))
  78. {
  79. Worker::runAll();
  80. }