当前位置: 首页 > news >正文

PHP+Swoole网络通信框架

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

        Swoole主要功能: PHP语言的异步、并行、高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。

WebSocket Server

$serv = new swoole_websocket_server("127.0.0.1", 9502);
$serv->on('Open', function($server, $req) 
{    
    echo "connection open: ".$req->fd;
});
$serv->on('Message', function($server, $frame) 
{    
    echo "message: ".$frame->data;    
    $server->push($frame->fd, json_encode(["hello", "world"]));
});
$serv->on('Close', function($server, $fd) 
{    echo "connection close: ".$fd;
});

$serv->start();

TCP Server

$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 8,   //工作进程数量
    'daemonize' => true, //是否作为守护进程
));
$serv->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();

TCP Client

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
//设置事件回调函数
$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});
$client->on("receive", function($cli, $data){
    echo "Received: ".$data."\n";
});
$client->on("error", function($cli){
    echo "Connect failed\n";
});
$client->on("close", function($cli){
    echo "Connection close\n";
});
//发起网络连接
$client->connect('127.0.0.1', 9501, 0.5);

自己工作中用到的就这三个,具体的配置和更多的功能,可以访问swoole网站: http://www.swoole.com/

注明: Apache 配置swoole的时候,记得在两个配置文件php.ini 中,加入 swoole.so 否则会导致部分访问无效

转载于:https://my.oschina.net/u/2503185/blog/541115

相关文章:

  • spark-submit提交任务到集群
  • 结合Scikit-learn介绍几种常用的特征选择方法
  • js图片处理
  • bconsole中相关命名说明
  • Oracle更改redo log的大小
  • parallels desktop克隆ubuntu虚拟机网卡丢失
  • 泛型vector
  • [转]SQLServer 2008数据库查看死锁、堵塞的SQL语句
  • Solr5安装部署
  • Scrapy 入门:Hello Scrapy
  • 李嘉诚储藏财富的背后隐藏着什么奥秘?
  • Bitnami Redmine 与 gerrit 整合问题解决
  • 电商项目系列文档(三):秒杀的设计
  • Gitlab数据迁移
  • js模块化开发——require.js学习总结
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • flutter的key在widget list的作用以及必要性
  • gf框架之分页模块(五) - 自定义分页
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • tweak 支持第三方库
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 前端路由实现-history
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • ionic异常记录
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Z2294. 打印树的直径
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (一)RocketMQ初步认识
  • (转)Linux下编译安装log4cxx
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)编辑寄语:因为爱心,所以美丽
  • .net FrameWork简介,数组,枚举
  • .NET MVC第三章、三种传值方式
  • .Net Web窗口页属性
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 流——流的类型体系简单介绍
  • .NET正则基础之——正则委托
  • :中兴通讯为何成功
  • @staticmethod和@classmethod的作用与区别
  • @Valid和@NotNull字段校验使用
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [145] 二叉树的后序遍历 js
  • [AIGC] MySQL存储引擎详解
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [Asp.net mvc]国际化
  • [AX]AX2012开发新特性-禁止表或者表字段