UDP 异步风格服务器

  1. # udp_server.php
  2. // 创建 UDP 服务器对象,监听0.0.0.0:9502端口,类型为SWOOLE_SOCK_UDP
  3. $serv = new Swoole\Server("0.0.0.0", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
  4. // 设置服务器运行参数
  5. $serv->set(array(
  6. 'daemonize' => 1, // 作为守护进程运行,需同时设置log_file
  7. 'log_file' => '/www/logs/swoole.log', // 指定标准输出和错误日志文件
  8. ));
  9. // 监听数据接收事件
  10. // $clientInfo数组是客户端的相关信息,有客户端的 IP 和端口等内容
  11. $serv->on('Packet', function ($serv, $data, $clientInfo) {
  12. // 向客户端发送数据
  13. $serv->sendto($clientInfo['address'], $clientInfo['port'], "Server: " . $data);
  14. var_dump($clientInfo);
  15. });
  16. // 启动服务器
  17. $serv->start();

运行并测试 UDP 异步风格服务器

  1. # 如果程序已经运行,先结束进程
  2. kill -9 11591
  3. # 在 cli 命令行环境运行服务端
  4. php udp_server.php
  5. # 查看服务器监听的端口
  6. netstat -an | grep 9501
  7. # 使用netcat测试连接服务端
  8. netcat -u 127.0.0.1 9502
  9. # 发送数据
  10. hello
  11. # 接收数据
  12. Server: hello

UDP 没有协程风格服务器

UDP 同步阻塞客户端

  1. // 同步阻塞客户端可以用于 PHP-FPM 环境下
  2. // UDP不存在连接的概念,也没有异步
  3. $client = new Swoole\Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);
  4. $client->sendto('127.0.0.1', 9502, "hello world\n");
  5. echo $client->recv();

UDP 协程客户端

  1. // 设置要 Hook 的函数的范围
  2. Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
  3. // 协程客户端,底层自动使用协程调度实现异步IO,用于代替异步客户端
  4. Co\run(function(){
  5. $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_UDP);
  6. $client->set(array(
  7. 'timeout' => 1.5, //总超时,包括连接、发送、接收所有超时
  8. 'write_timeout' => 2.0, //发送超时,会覆盖第一个总的 timeout
  9. 'read_timeout' => 0.5, //接收超时,会覆盖第一个总的 timeout
  10. ));
  11. $client->sendto('127.0.0.1', 9502, "hello world\n");
  12. echo $client->recv();
  13. });

Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端的更多相关文章

  1. Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端

    TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...

  2. Swoole 中使用 WebSocket 异步服务器、WebSocket 协程服务器

    WebSocket 异步风格服务器 WebSocket\Server 继承自 Http\Server,所以 Http\Server 提供的所有 API 和配置项都可以使用. # ws_server.p ...

  3. Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器

    HTTP 异步风格服务器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 设置服务器运行 ...

  4. web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)

    知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...

  5. Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程

    1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...

  6. Swoole 同步模式与协程模式的对比

    在现代化 PHP 高级开发中,Swoole 为 PHP 带来了更多可能,如:常驻内存.协程,关于传统的 Apache/FPM 模式与常驻内存模式(同步)的巨大差异,之前我做过测试,大家能直观的感受到性 ...

  7. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢

    实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAsync 3,LoadSceneAsync 其它未经测试 此问题的提出是由于一 ...

  8. 用python实现自己的http服务器——多进程、多线程、协程、单进程非堵塞版、epoll版

    了解http协议 http请求头 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Pragma: no-cache Cache-Co ...

  9. Swoole中内置Http服务器

    创建httpServer.php文件,代码如下: <?php // 创建服务对象 $http = new swoole_http_server("10.211.55.17", ...

随机推荐

  1. Linux系统的负载与CPU、内存、硬盘、用户数监控的shell脚本

    利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 这几天在学习研究shell脚本,写的一些系统负载.CPU.内存.硬盘.用户数监控脚本程序.在没有nagios监控的情况下 ...

  2. 【Linux】【Shell】【Basic】数组

    1. 数组:         变量:存储单个元素的内存空间:         数组:存储多个元素的连续的内存空间:             数组名:整个数组只有一个名字:             数组 ...

  3. jquery:iframe里面的元素怎样触发父窗口元素的事件?

    例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, ...

  4. js - 日期、时间 Date对象方法

    Date 是 JS 内置的日期构造函数 var d = new Date();  // 这个是系统当前时间的日期实例 d.getYear(); // 返回 d 实例年份 - 1900 d.getFul ...

  5. centos配置 显示中文

    目录 一.简介 二.操作 一.简介 不显示中文,出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的. 二.操作 1.查看当前系统语言 登陆linux系统打开操作终端之后,输入 e ...

  6. <转>Java NIO API

    Java NIO API详解 NIO API 主要集中在 java.nio 和它的 subpackages 中: java.nio 定义了 Buffer 及其数据类型相关的子类.其中被 java.ni ...

  7. 工厂为什么要进行计划排产,APS高级计划排程系统的优势作用是什么?

    我们每个人的指挥中心是大脑,大脑对我们身体发出各种各样的指令,不停的告诉我们身体去干什么. 那么,一个制造企业的指挥中心是哪里?工厂每天都会接到各种各样的订单,通过几百上千的工人,使用各种设备来生产. ...

  8. python 字符编码讲解

    ANSI不是一种具体的编码格式 ANSI在中文Windows操作系统代码指的是GBK编码 ANSI在中文Mac操作系统代码指的是UTF-8编码 ANSI在其他国家的操作系统中有其他的编码格式 #ASC ...

  9. 如何下载哔哩哔哩、爱奇艺、腾讯视频、优酷、斗鱼、TED、YouTube网页视频

    这里使用you-get工具进行下载 github地址:https://github.com/soimort/you-get/ github项目文档:https://github.com/soimort ...

  10. 一个VS主题网站https://studiostyl.es/

    地址: https://studiostyl.es/ 用法: 工具->导入和导出设置->导入选定的环境设置->是,保存我当前的设置->选择下载的主题文件,完成.