Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端
UDP 异步风格服务器
# udp_server.php
// 创建 UDP 服务器对象,监听0.0.0.0:9502端口,类型为SWOOLE_SOCK_UDP
$serv = new Swoole\Server("0.0.0.0", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
// 设置服务器运行参数
$serv->set(array(
'daemonize' => 1, // 作为守护进程运行,需同时设置log_file
'log_file' => '/www/logs/swoole.log', // 指定标准输出和错误日志文件
));
// 监听数据接收事件
// $clientInfo数组是客户端的相关信息,有客户端的 IP 和端口等内容
$serv->on('Packet', function ($serv, $data, $clientInfo) {
// 向客户端发送数据
$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server: " . $data);
var_dump($clientInfo);
});
// 启动服务器
$serv->start();
运行并测试 UDP 异步风格服务器
# 如果程序已经运行,先结束进程
kill -9 11591
# 在 cli 命令行环境运行服务端
php udp_server.php
# 查看服务器监听的端口
netstat -an | grep 9501
# 使用netcat测试连接服务端
netcat -u 127.0.0.1 9502
# 发送数据
hello
# 接收数据
Server: hello
UDP 没有协程风格服务器
UDP 同步阻塞客户端
// 同步阻塞客户端可以用于 PHP-FPM 环境下
// UDP不存在连接的概念,也没有异步
$client = new Swoole\Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);
$client->sendto('127.0.0.1', 9502, "hello world\n");
echo $client->recv();
UDP 协程客户端
// 设置要 Hook 的函数的范围
Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
// 协程客户端,底层自动使用协程调度实现异步IO,用于代替异步客户端
Co\run(function(){
$client = new Swoole\Coroutine\Client(SWOOLE_SOCK_UDP);
$client->set(array(
'timeout' => 1.5, //总超时,包括连接、发送、接收所有超时
'write_timeout' => 2.0, //发送超时,会覆盖第一个总的 timeout
'read_timeout' => 0.5, //接收超时,会覆盖第一个总的 timeout
));
$client->sendto('127.0.0.1', 9502, "hello world\n");
echo $client->recv();
});
Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端的更多相关文章
- Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端
TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...
- Swoole 中使用 WebSocket 异步服务器、WebSocket 协程服务器
WebSocket 异步风格服务器 WebSocket\Server 继承自 Http\Server,所以 Http\Server 提供的所有 API 和配置项都可以使用. # ws_server.p ...
- Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器
HTTP 异步风格服务器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 设置服务器运行 ...
- web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)
知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...
- Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...
- Swoole 同步模式与协程模式的对比
在现代化 PHP 高级开发中,Swoole 为 PHP 带来了更多可能,如:常驻内存.协程,关于传统的 Apache/FPM 模式与常驻内存模式(同步)的巨大差异,之前我做过测试,大家能直观的感受到性 ...
- UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAsync 3,LoadSceneAsync 其它未经测试 此问题的提出是由于一 ...
- 用python实现自己的http服务器——多进程、多线程、协程、单进程非堵塞版、epoll版
了解http协议 http请求头 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Pragma: no-cache Cache-Co ...
- Swoole中内置Http服务器
创建httpServer.php文件,代码如下: <?php // 创建服务对象 $http = new swoole_http_server("10.211.55.17", ...
随机推荐
- Mysql的索引调优详解:如何去创建索引以及避免索引失效
在正式介绍Mysql调优之前,先补充mysql的两种引擎 mysql逻辑分层 InnoDB:事务优先(适合高并发操作,行锁) MyISAM:性能优先(表锁) 查看使用的引擎: show variabl ...
- Dubbo服务分组
服务分组与多版本控制的使用方式几乎是相同的,只要将version替换为group即可.但使用目的不同.使用版本控制的目的是为了升级,将原有老版本替换掉,将来不再提供老版本的服务,所以不同版本间不能出现 ...
- Centos 的常用命令总结
设置静态IP和DNS vim /etc/sysconfig/network-scripts/ifcfg-[网卡名称] 修改 BOOTPROTO=static 添加 IPADDR=192.168.1.1 ...
- Spring Boot with H2 Database
Learn to configure H2 database with Spring boot to create and use an in-memory database in runtime, ...
- MFC入门示例之访问对话框控件的7种方法
方法一: 1 //方法一 2 void CMFCApplication2Dlg::OnBnClickedButton1() 3 { 4 int num1, num2, num3; 5 TCHAR ch ...
- Java知识点总结——IO流框架
IO框架 一.流的概念 概念:内存与存储设备之间传输数据的通道. 二.流的分类 按方向分类: 输入流:将<存储设备>中的内容读入到<内存>中 输出流:将<内存>中的 ...
- Linkerd Service Mesh 服务配置文件规范
服务配置文件 为 Linkerd 提供有关服务的附加信息. 以下是可以使用服务配置文件完成的所有操作的参考. 系列 中文手册(https://linkerd.hacker-linner.com) Sp ...
- 你的Redis怎么持久化的
一.持久化套路 OK,一般我们在生产上采用的持久化策略为 (1)master关闭持久化 (2)slave开RDB即可,必要的时候AOF和RDB都开启 该策略能够适应绝大部分场景,绝大部分集群架构. 为 ...
- pipeline是什么?
目录 一.pipeline是什么? 二.jenkinsfile是什么 三.pipeline语法选择 四.脚本式和声明式 五.插件与pipeline 一.pipeline是什么? pipeline是部署 ...
- mit6.830-lab2-常见算子和 volcano 执行模型
一.实验概览 github : https://github.com/CreatorsStack/CreatorDB 这个实验需要完成的内容有: 实现过滤.连接运算符,这些类都是继承与OpIterat ...