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
在这里插入图片描述
服务端 输出客户端信息
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值