加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

swoole的UDP服务

发布时间:2020-12-13 21:23:37 所属栏目:PHP教程 来源:网络整理
导读:1.UDP服务器与TCP服务器区别: UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的端口发送数据包,对应的事件为onPacket。 $clientInfo是客户端的相关信息,是一个数组,有客户端的IP和端口等内容,调用 $server-sendto 方法向客

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',"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...

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读