每日一博 | 为什么 PHP 程序员应该学习使用 Swoole?

综合编程 2018-06-18

为什么 PHP 程序员应该学习使用 Swoole

宇润 发布于 前天 09:28

字数 1142

阅读 174

收藏 1

点赞 0

评论 0

最近两个月一直在研究 Swoole,研究成果即将在6.21正式开源发布,这段时间没有来水文章,趁着今天放假来水水吧。

借助这篇文章,我希望能够把 Swoole 安利给更多人。虽然 Swoole 可能目前定位是一些高级 phper 的玩具,让中低级望而生畏,可能对一些应用场景也一脸懵逼,但其实没这么难的。

在 Swoole 官网的自我介绍是“面向生产环境的 PHP 异步网络通信引擎”,首先 Swoole 它是一个网络应用的开发工具,它支持 Http、TCP、UDP、WebSocket。

Swoole 和我们传统的 PHP 开发差别是有的,需要理解的概念也是有的。使用目前一些基于 Swoole 的框架开发的话,从开发习惯上和传统的TP、LV 框架相差不多。

那为什么要使用 Swoole?

宇润认为有以下几点:

  • 常驻内存,避免重复加载带来的性能损耗,提升海量性能

  • 协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)

  • 方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信

  • PHP 高性能微服务架构成为现实

常驻内存

目前传统 PHP框架,在处理每个请求之前,都要做一遍加载框架文件、配置的操作。这可能已经成为性能问题的一大原因,而使用 Swoole 则没有这个问题,一次加载多次使用。

协程

如下图所示,这是同一个线程处理并发请求的场景,比如你某个接口中需要调用其它 api 接口或读写大文件,传统同步阻塞和协程异步的优势就体现了出来。

说到协程,就得先简单说说进程和线程,众所周知进程是很占用资源的,为了处理请求大量创建进程肯定是得不偿失的。而多线程应用就比较多了,在 CPU 层面有几个核心就会执行几个任务,线程一旦创建的多了,就会有线程调度的损耗。

协程是在单线程基础上实现的,它可以最大限度利用 CPU 资源,而不会在等待 I/O 时白白浪费。当然,协程数越多占用的内存也就越多,不过这个是可以接受的,相比进程和线程,占用的资源是相对较少的。

使用协程时,遇到读写文件、请求接口等场景,会自动挂起协程,把 CPU 让给其它协程执行任务,这样可以提升单线程的 CPU 资源利用率,减少浪费,从而提高性能。

协程代码示例:

<?php
use SwooleCoroutine as co;
 
// 协程
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    // 创建协程
    go(function() use($i){
        co::sleep(1.0); // 模拟请求接口、读写文件等I/O
        echo $i, PHP_EOL;
    });
}
swoole_event_wait();
echo 'co time:', microtime(true) - $time, ' s', PHP_EOL;
 
// 同步
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    sleep(1); // 模拟请求接口、读写文件等I/O
    echo $i, PHP_EOL;
}
echo 'sync time:', microtime(true) - $time, ' s', PHP_EOL;

运行结果:

0
9
8
7
6
5
4
3
2
1
co time:1.0087130069733 s
0
1
2
3
4
5
6
7
8
9
sync time:10.010055065155 s

从上面结果可以看出,协程方式执行并不是顺序的,性能更高,在sleep时会把当前线程的任务执行权交给其他协程。

创建 Http 服务

其实也没想象中的难,看代码:

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on('request', function ($request, $response) {
    $response->end("

Hello Swoole. #".rand(1000, 9999)."

"); }); $http->start();

微服务

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。

详见: https://segmentfault.com/a/1190000011825769

如有错误之处欢迎指出,我是真心想向大家推荐 Swoole!

© 著作权归作者所有

共有人打赏支持

宇润

参与源创会

领取时间:2018/05/27

“源创会”在线下联结了各位 OSCer,推广开源项目和理念,很荣幸有你的参与~

领取条件:参与过开源中国“源创会”的 OSCer 可以领取

粉丝 12

博文 3

码字总数 1934

作品 11

无锡

技术主管

相关文章 最新文章

2017 年 PHP 程序员未来路在何方

PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js 、 GO 、 Python 不断地在挑战 PHP 的地位。这些技术的推动者非常热衷...

王练 ⋅ 2017/03/31 ⋅ 43

2017 年 PHP 程序员未来路在何方?

原文出处:韩天峰 PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js 、 GO 、 Python 不断地在挑战 PHP 的地位。这些技术...

韩天峰 ⋅ 2017/04/02 ⋅ 0

PHP开发框架--GSF

GSF(GridSwooleFramework)基于Swoole框架进行二次封装完善 ,降低了PHP使用swoole的门槛。 Swoole由于其文档太少,难度对于PHP程序员来说过于大,很多php程序员对其敬而远之。GSF框架就是为了...

匿名 ⋅ 2016/07/12 ⋅ 0

PHP的异步并行扩展Swoole已收录到PHP官方扩展库

PHP的异步并行扩展Swoole已收录到PHP官网扩展库pecl.php.net。最新的版本是swoole-1.6.9。国内程序员组织的开源PHP扩展项目,能够添加到pecl中的并不多,目前仅有yaf,yar,yac,swoole等数个。...

matyhtf ⋅ 2014/01/17 ⋅ 14

liufee/yii2-swoole

yii2 swoole 让yii2运行在swoole上。如果您在使用中遇到问题或者想学习yii2结合swoole可以加qq群258780872一起讨论 性能 运行在swoole上的yii2是运行在php-fpm上yii2的5倍以上,而且一句代码...

liufee ⋅ 2017/12/26 ⋅ 0

盘点各种程序员常用的框架,有你用的吗?

避免重复造轮子,我们现在的程序员都在尽量的使用框架来完成很多功能需求,那么你知道各种程序员都常用什么框架吗? JavaScript 程序员 自从有了基于服务端的JavaScript,JavaScript程序员似...

达尔文 ⋅ 2017/09/24 ⋅ 32

PHP的异步并行网络扩展Swoole已发布1.7.5版本

PHP的异步并行网络扩展Swoole今天发布了最新的1.7.5版本。 项目主页:http://www.swoole.com/ 文档页面:http://wiki.swoole.com/ 源代码:https://github.com/swoole/swoole-src 1.7.4版本:...

matyhtf ⋅ 2014/09/10 ⋅ 31

如何学习swoole,待完善

建议 个人认为能玩 swoole 都是 PHP 基础扎实的人 请抛弃集成环境(一键式安装),使用 Vagrant/Docker 能手动搭建 LNMP 环境,强烈建议自己手动编译 MySQL 以外的软件 PHP 报错能独立解决 ...

krasen ⋅ 2016/08/29 ⋅ 0

PHP 的异步并行和协程 C 扩展 - Swoole

PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器...

matyhtf ⋅ 2014/03/03 ⋅ 12

swoole 中的锁及其应用

date: 2017-12-25 01:42:00 title: swoole 中的锁及其应用 时间不早了, 尽量言简意赅一些. 怎么快速学习锁: 锁是什么 -> 锁的概念 为什么要用锁 -> 锁的使用场景 怎么使用锁 -> show me the...

daydaygo ⋅ 2017/12/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 48分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构 desc 表名- 查看生成表的SQL show create table 表名- 查看索引 show index from 表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开源中国

责编内容by:开源中国 (源链)。感谢您的支持!

您可能感兴趣的

How to Automate Your Developer Handoffs With UXPin Constant back-and-forth between designers and developers is a pain we all know w...
Swoole 1.9.15 发布,增加静态编译支持 PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 1.9.15 版本。此版本增加了对静态编译的支持,可以将 Swoole 与 PHP 源码一起编译,...
Top JavaScript Frameworks For Developers In 2018! When it comes to Web Development, JavaScript frameworks today are among the mos...
比特币开发人员Eric Lombrozo:宁愿相信政府,也不相信矿工... 为什么我们一直说比特币似乎被其开发者带上了一条与中本聪意愿不同的路,因为事实总是一次又一次的证明,比特币目前的开发者并不愿意按照中本聪在白皮书中...
A Juul Is Pretty Much A Cigarette, And Other Facts Welcome to What We Learned This Week, a digest of the most curiously important f...