1
1
<?php
2
- //example from manual
3
- use Workerman \Connection \AsyncUdpConnection ;
4
- use Workerman \Timer ;
2
+
3
+ use Symfony \Component \Process \PhpProcess ;
5
4
use Workerman \Worker ;
6
5
7
- it ('tests udp connection ' , function () {
8
- /** @noinspection PhpObjectFieldsAreOnlyWrittenInspection */
9
- $ server = new Worker ('udp://0.0.0.0:9292 ' );
10
- $ server ->onMessage = function ($ connection , $ data ) {
11
- expect ($ data )->toBe ('hello ' );
12
- $ connection ->send ('xiami ' );
13
- };
14
- $ server ->onWorkerStart = function () {
15
- //client
16
- Timer::add (1 , function () {
17
- $ client = new AsyncUdpConnection ('udp://127.0.0.1:1234 ' );
18
- $ client ->onConnect = function ($ client ) {
19
- $ client ->send ('hello ' );
20
- };
21
- $ client ->onMessage = function ($ client , $ data ) {
22
- expect ($ data )->toBe ('xiami ' );
23
- //terminal this test
24
- terminate_current_test ();
25
- };
26
- $ client ->connect ();
27
- }, null , false );
28
- };
29
- Worker::runAll ();
30
- })->skipOnWindows () //require posix, multiple workers
31
- ->skip (message: 'this test needs to run isolated process while pest not support doing so yet ' );
6
+ $ serverAddress = 'udp://127.0.0.1:6789 ' ;
7
+ beforeAll (function () use ($ serverAddress ) {
8
+ $ process = new PhpProcess (<<<PHP
9
+ <?php
10
+ if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
11
+ if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
12
+ if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
13
+ require './vendor/autoload.php';
14
+ use Workerman\Worker;
15
+
16
+ \$server = new Worker(' $ serverAddress');
17
+ \$server->onMessage = function ( \$connection, \$data) {
18
+ if(str_starts_with( \$data, 'bye')) {
19
+ terminate_current_process();
20
+ }
21
+ \$connection->send('received: '. \$data);
22
+ };
23
+ global \$argv;
24
+ \$argv = ['', 'start'];
25
+ Worker::runAll();
26
+ PHP
27
+ );
28
+ $ process ->start ();
29
+ sleep (5 );
30
+ });
31
+
32
+ afterAll (function () use ($ serverAddress ) {
33
+ $ socket = stream_socket_client (self ::$ serverAddress , timeout: 1 );
34
+ fwrite ($ socket , 'bye ' );
35
+ fclose ($ socket );
36
+ });
37
+
38
+ it ('tests udp connection ' , function () use ($ serverAddress ) {
39
+ $ socket = stream_socket_client ($ serverAddress , $ errno , $ errstr , 1 );
40
+ expect ($ errno )->toBeInt (0 );
41
+ fwrite ($ socket , 'xiami ' );
42
+ $ data = fread ($ socket , 1024 );
43
+ expect ($ data )->toBeString ('received: xiami ' );
44
+ fclose ($ socket );
45
+ })
46
+ ->skipOnWindows (); //require posix
0 commit comments