UdpConnectionTest.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. use Symfony\Component\Process\PhpProcess;
  3. use Workerman\Worker;
  4. $serverAddress = 'udp://127.0.0.1:6789';
  5. beforeAll(function () use ($serverAddress) {
  6. $process = new PhpProcess(<<<PHP
  7. <?php
  8. if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
  9. if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
  10. if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
  11. require './vendor/autoload.php';
  12. use Workerman\Worker;
  13. \$server = new Worker('$serverAddress');
  14. \$server->onMessage = function (\$connection, \$data) {
  15. if(str_starts_with(\$data, 'bye')) {
  16. terminate_current_process();
  17. }
  18. \$connection->send('received: '.\$data);
  19. };
  20. Worker::$command = 'start';
  21. Worker::runAll();
  22. PHP
  23. );
  24. $process->start();
  25. sleep(5);
  26. });
  27. afterAll(function () use ($serverAddress) {
  28. $socket = stream_socket_client(self::$serverAddress, timeout: 1);
  29. fwrite($socket, 'bye');
  30. fclose($socket);
  31. });
  32. it('tests udp connection', function () use ($serverAddress) {
  33. $socket = stream_socket_client($serverAddress, $errno, $errstr, 1);
  34. expect($errno)->toBeInt(0);
  35. fwrite($socket, 'xiami');
  36. $data = fread($socket, 1024);
  37. expect($data)->toBeString('received: xiami');
  38. fclose($socket);
  39. })
  40. ->skipOnWindows(); //require posix