swoole学习——3、搭建UDP服务

本文只简单实现使用swoole搭建UDP服务器实例,具体流程参数配置详情请参照swoole官网。

程序代码

服务器类

Udp.php

//创建server对象 监听127.0.0.1:9502端口 服务器类型为UPD
$udp = new swoole_server('127.0.0.1',9502,SWOOLE_PROCESS,SWOOLE_SOCK_UDP);

//设置服务器运行配置参数
$udp->set([
    'worker_num'=>4,    //进程数
    'max_request'=>50   //最大请求50次数结束运行
]);

/**
 * sendto方法 发送数据到客户端
 * @param int address  客户端ip
 * @param int port 端口号
 * @param string $data 文本数据
 */
 //监听数据接收事件
$udp->on('Packet',function ($udp,$data,$clientInfo){
   $udp->sendto($clientInfo['address'],$clientInfo['port'],"Server ".$data);
   var_dump($clientInfo);
});

//启动服务器
$udp->start();

UDP服务器与TCP服务器不同,UDP没有连接的概念。启动server后,客户端无须connect,可直接向服务器监听的9502端口发送数据,对应的事件是Packet。

  • $clientInfo是客户端的相关信息,是一个数组,有客户端的IP和端口等内容
  • 调用 $server->sendto方法向客户端发送数据

函数原型:

bool Server->sendto(string $ip, int $port, string $data, int $server_socket = -1);

  • $ip为IPv4或IPv6字符串,如192.168.1.102。如果IP不合法会返回错误
  • $port为 1-65535的网络端口号,如果端口错误发送会失败
  • $data要发送的数据内容,可以是文本或者二进制内容
  • $server_socket 服务器可能会同时监听多个UDP端口,此参数可以指定使用哪个端口发送数据包

客户端类

Udp_client.php

//创建swoole客户端服务 socket类型为UDP
$udp_client = new swoole_client(SWOOLE_SOCK_UDP);

//php cli常量 STDOUT
fwrite(STDOUT,'请输入消息:');
//获取客户端输入的内容数据 STDIN可以拿到在dos下输入的内容,fgets读取这个STDIN文件句柄
$msg = trim(fgets(STDOUT));

/**
 * sendto方法 发送数据到server
 * @param int address  客户端ip
 * @param int port 端口号
 * @param string $data 文本数据
 */
$send_result = $udp_client->sendto('127.0.0.1',9502,$msg);
if($send_result == false){
    echo '发送数据失败!';
    exit;
}

/**
 * 接收服务器数据
 * @param int $size 接收数据的缓存区最大长度,此参数不要设置过大,否则会占用较大内存
 * @param bool $waitall 是否等待所有数据到达后返回
 */
$server_msg = $udp_client->recv($size=65535,$watill=0);
echo $server_msg;

函数原型:

swoole_client->sendto

向任意IP:PORT的主机发送UDP数据包,仅支持SWOOLE_SOCK_UDP/SWOOLE_SOCK_UDP6类型的swoole_client对象。

bool swoole_client->sendto(string $ip, int $port, string $data);

  • $ip,目标主机的IP地址,支持IPv4/IPv6
  • $port,目标主机端口
  • $data,要发送的数据内容,不得超过64K

测试

运行Udp.php 启动UDP服务器
在这里插入图片描述
客户端测试 输入hello
在这里插入图片描述
服务端 输出客户端信息
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Hou_guang/article/details/88764017
今日推荐