• swoole的UDP服务


    1.UDP服务器与TCP服务器区别:
    UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的端口发送数据包,对应的事件为onPacket。
    $clientInfo是客户端的相关信息,是一个数组,有客户端的IP和端口等内容,调用 $server->sendto 方法向客户端发送数据。

    2.服务器端程序代码
    udp_server.php
    <?php
    //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP
    $server = new swoole_server('127.0.0.1', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
    //设置开启的worker数
    //命令行查看server开启的worker数
    //如果当前文件名为 udp_server.php, 则 ps aft | grep udp_server.php
    $server->set([
      'worker_num' => 4,// 初始工作进程数
      'daemonize' => false,// 后台运行
    ]);
    //监听数据接收事件
    $server->on('packet', function ($server, $data, $client_info) {
      echo "接收到客户端信息: " . $data . PHP_EOL;
      var_dump($client_info);
      // 由于UDP协议不能确保信息送达,所以当服务端收到信息后最好做个应答,这样客户端才有依据来做判断
      $server->sendto($client_info['address'], $client_info['port'], "This is server..." . PHP_EOL);
    });
    //启动服务器
    $server->start();

    3.客户端程序代码
    udp_client.php
    <?php
    $client = new swoole_client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);
    $client->sendto('127.0.0.1', 9502, "I am client...".PHP_EOL);
    echo $client->recv() . PHP_EOL;

    4.服务器端执行程序
    php udp_server.php
    在命令行下运行 udp_server.php 程序,启动成功后可以使用 netstat -an | grep 9502 看到,已经在监听 9502 端口。

    5.客户端执行程序
    php udp_client.php

    6.服务器端执行结果
    例如:
    接收到客户端信息: I am client...
    array(4) {
      ["server_socket"] => int(3)
      ["server_port"] => int(9502)
      ["address"] => string(9) "127.0.0.1"
      ["port"] => int(48866)
    }

    7.客户端执行结果
    This is server...

  • 相关阅读:
    Python前言之Markdown使用
    Linux压缩命令
    ubuntu安装nodejs
    linux搭建nginx流服务器,OBS推流,VCL拉流播放
    nginx配置文件
    控制语句
    鼠标用户和键盘用户
    if else
    cookie自封装对象
    C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表
  • 原文地址:https://www.cnblogs.com/WebLinuxStudy/p/12850979.html
Copyright © 2020-2023  润新知