swoole系列之四:UDP服务端与客户端

一、UDP服务端

<?php
/**
 * +----------------------------------------------------------
 * date: 2019\8\26 0026 21:23
 * +----------------------------------------------------------
 * author: Raoxiaoya
 * +----------------------------------------------------------
 * describe: UDP服务
 * +----------------------------------------------------------
 */

// 1、建立对象
$server = new Swoole\Server('0.0.0.0', 9002, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);

// 2、设置运行时
$server->set([
    'worker_num' => 4,// 初始工作进程数
    'daemonize'  => false,// 后台运行
]);

// 3、设置回调,发生在worker进程中
$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);
});

// 4、启动
$server->start();

netstat -lntp 居然没看到 9002 端口的监听,原来此命令只查看 tcp,tcp6 的服务。
改用 netstat -anp | grep 9002 可以查看全部的服务

二、UDP同步客户端:

<?php
/**
 * +----------------------------------------------------------
 * date: 2019\8\26 0026 21:36
 * +----------------------------------------------------------
 * author: Raoxiaoya
 * +----------------------------------------------------------
 * describe: UDP同步客户端
 * +----------------------------------------------------------
 */

$client = new Swoole\Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);

$client->sendto('127.0.0.1', 9002, "I am client...".PHP_EOL);

echo $client->recv();

echo PHP_EOL;

// 脚本执行完就结束进程了,不像tcp客户端那样还保持着连接。

三、UDP异步客户端:

<?php
/**
 * +----------------------------------------------------------
 * date: 2019\8\26 0026 22:33
 * +----------------------------------------------------------
 * author: Raoxiaoya
 * +----------------------------------------------------------
 * describe: UDP异步客户端
 * +----------------------------------------------------------
 */
$client = new Swoole\Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);

$client->sendto('127.0.0.1', 9002, "I am client...".PHP_EOL);

$client->on('receive', function($client, $data){
    echo "receive data from server: " . $data . PHP_EOL;
});

$client->on('error', function($client){
    echo "client error: " . $client->errCode . PHP_EOL;
});

php udp_client_async.php

服务端可以收到信息,但是客户端直接报错中断了,待解决
ERROR swReactorEpoll_del(:151): epoll remove fd[4#0] failed. Error: No such file or directory[2].

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值