function my_onPacket(swoole_server $serv, $data, $addr) { // var_dump($addr); $serv->sendto($addr['address'], $addr['port'], 'Swoole: ' . $data); }
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $task_id = $serv->task("task-" . $fd); echo "Dispath AsyncTask: id={$task_id}\n"; } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } echo "SyncTask: result=" . var_export($result, true) . "\n"; } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->send($fd, "close connection\n"); $result = $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); var_dump($info["remote_ip"]); $serv->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(2000, function ($id) { echo "tick #{$id}\n"; }); } elseif ($cmd == 'addtimer') { $serv->addtimer(3000); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } else { $ret = $serv->send($fd, 'Swoole: ' . $data, $from_id); var_dump($ret); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }
<?php /** * Created by PhpStorm. * User: xiangdong * Date: 16/3/1 * Time: 下午2:16 */ //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP $server = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); //监听数据发送事件 $server->on('Packet', function ($server, $data, $clientInfo) { $server->sendto($clientInfo['address'], $clientInfo['port'], "Server " . $data); var_dump($clientInfo); }); //启动服务器 $server->start();
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $serv->task("task-" . $fd); } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } } elseif ($cmd == "taskWaitMulti") { $tasks = array('taskWaitMulti', 'taskWaitMulti'); $result = $serv->taskWaitMulti($tasks); if (is_array($result)) { $serv->send($fd, "taskWaitMulti OK"); } else { $serv->send($fd, "taskWaitMulti error"); } } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); $serv->send($fd, serialize($info)); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'sendfile') { $serv->sendfile($fd, __DIR__ . '/test.jpg'); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(1000, function ($id) use($serv, $fd) { $serv->send($fd, "tick"); $serv->clearTimer($id); }); } elseif ($cmd == 'after') { $serv->after(1000, function ($id) use($serv, $fd) { $serv->send($fd, "after"); }); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . "\ncount=" . count($serv->connections) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == "fatalerror") { require __DIR__ . '/php/error.php'; } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } elseif ($cmd == 'defer') { $serv->defer(function () use($fd, $serv) { $serv->close($fd); $serv->defer(function () { echo "deferd\n"; }); }); $serv->send($fd, 'Swoole: ' . $data, $from_id); } elseif ($cmd == 'big_resp') { $serv->send($fd, str_repeat('A', 256 * 1024)); } elseif ($cmd == 'big_task') { $serv->task($fd . ' ' . str_repeat('A', 256 * 1024 - 8)); } else { $serv->send($fd, 'Swoole: ' . $data, $from_id); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }
<?php //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP $serv = new swoole_server('127.0.0.1', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); $serv->set(['worker_num' => 1]); //监听数据发送事件 //$serv->on('Packet', function (swoole_server $serv, $fd, $data, $clientInfo) { $serv->on('Packet', function (swoole_server $serv, $data, $addr) { $serv->sendto($addr['address'], $addr['port'], "Swoole UDP Server: {$data}"); var_dump($addr, strlen($data)); }); //启动服务器 $serv->start(); ?>
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $task_id = $serv->task("task " . $fd); echo "Dispath AsyncTask: id={$task_id}\n"; } elseif ($cmd == "taskclose") { $serv->task("close " . $fd); echo "close the connection in taskworker\n"; } elseif ($cmd == "tasksend") { $serv->task("send " . $fd); } elseif ($cmd == "bigtask") { $serv->task(str_repeat('A', 8192 * 5)); } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } echo "SyncTask: result=" . var_export($result, true) . "\n"; } elseif ($cmd == "taskWaitMulti") { $result = $serv->taskWaitMulti(array(str_repeat('A', 8192 * 5), str_repeat('B', 8192 * 6), str_repeat('C', 8192 * 8))); if ($result) { $resp = "taskWaitMulti ok\n"; foreach ($result as $k => $v) { $resp .= "result[{$k}] length=" . strlen($v) . "\n"; } $serv->send($fd, $resp); } else { $serv->send($fd, "taskWaitMulti error\n"); } } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "taskcallback") { $serv->task("taskcallback", -1, function (swoole_server $serv, $task_id, $data) { echo "Task Callback: "; var_dump($task_id, $data); }); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->send($fd, "close connection\n"); $result = $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); var_dump($info["remote_ip"]); $serv->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(2000, function ($id) { echo "tick #{$id}\n"; }); } elseif ($cmd == 'addtimer') { $serv->addtimer(3000); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . "\ncount=" . count($serv->connections) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif ($cmd == 'pause') { echo "pause receive data. fd={$fd}\n"; $serv->pause($fd); } elseif (substr($cmd, 0, 6) == "resume") { $resume_fd = substr($cmd, 7); $serv->resume($resume_fd); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == "fatalerror") { require __DIR__ . '/php/error.php'; } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } elseif ($cmd == 'defer') { $serv->defer(function () use($fd, $serv) { $serv->close($fd); $serv->defer(function () { echo "deferd\n"; }); }); $serv->send($fd, 'Swoole: ' . $data, $from_id); } else { $serv->send($fd, 'Swoole: ' . $data, $from_id); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }