初识PHP中的Swoole


Posted in PHP onApril 05, 2016

Swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率。最少的性能损耗,换取最大的开发效率。利用Swoole框架,开发一个复杂的Web功能,可以在很短的时间内完成。

官方定义:

Swoole:重新定义PHP

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

Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

swoole 扩展安装及案例来源:http://wiki.swoole.com/wiki/page/6.html

简单案例:

<?php
class Server
{
private $serv;
public function __construct()
{
$this->serv = new swoole_server("0.0.0.0", 9501);
$this->serv->set(array(
'worker_num' => 8,
'daemonize' => false,
'max_request' => 10000,
'dispatch_mode' => 2,
'debug_mode' => 1
));
$this->serv->on('Start', array($this, 'onStart'));
$this->serv->on('Connect', array($this, 'onConnect'));
$this->serv->on('Receive', array($this, 'onReceive'));
$this->serv->on('Close', array($this, 'onClose'));
$this->serv->start();
}
public function onStart($serv)
{
echo "Start\n";
}
public function onConnect($serv, $fd, $from_id)
{
$serv->send($fd, "Hello {$fd}!");
}
public function onReceive(swoole_server $serv, $fd, $from_id, $data)
{
echo "Get Message From Client {$fd}:{$data}\n";
}
public function onClose($serv, $fd, $from_id)
{
echo "Client {$fd} close connection\n";
}
}
// 启动服务器
$server = new Server(); 
<?php
class Client
{
private $client;
public function __construct()
{
$this->client = new swoole_client(SWOOLE_SOCK_TCP);
}
public function connect()
{
if (!$this->client->connect("127.0.0.1", 9501, 1)) {
echo "Error: {$fp->errMsg}[{$fp->errCode}]\n";
}
$message = $this->client->recv();
echo "Get Message From Server:{$message}\n";
fwrite(STDOUT, "请输入消息:");
$msg = trim(fgets(STDIN));
$this->client->send($msg);
}
}
$client = new Client();
$client->connect();

分别打开两个终端输入:php server.php

php client.php 即可看到效果!

Swoole功能介绍

包含以下几个特色功能:

1、 类似ORM的数据查询,提供SQL封装器,让MySQL的SQL与PHP的Array,会话,Cache无缝结合。

2、App MVC分层结构,有效的程序结构分层,提高程序的可维护性和扩展性,实现低耦合,基于接口开发。

3、集成大量,实用的功能,比如方便的数据库操作,模板操作,缓存操作,系统配置,表单处理,分页,数据调用,字典操作,上传处理,内容编辑,调试等。

4、模板-数据反射系统,可以直接在模板中调用数据,提供很多标签,可是无需修改程序,只修改模板,即可实现网站各类更新维护工作。

另外的几个功能

1、Swoole包含了大量类,提供众多的功能扩展,基本上Web开发能够用到的功能类,大部分都可以在Swoole框架中找到。

2、Swoole拥有插件系统,Fckeditor、Adodb、pscws中文分词、中文全文索引系统、最新的Key-Value数据库思想,TokyoTyrant,可以无限扩展框架的功能。

PHP 相关文章推荐
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
php对数组排序的简单实例
Dec 25 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
php获取QQ头像并显示的方法
Dec 23 PHP
Yii rules常用规则示例
Mar 15 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
php实现的顺序线性表示例
May 04 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 #PHP
PHP读取大文件的多种方法介绍
Apr 04 #PHP
PHP如何将XML转成数组
Apr 04 #PHP
php自动加载方式集合
Apr 04 #PHP
php文件上传的两种实现方法
Apr 04 #PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 #PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 #PHP
You might like
业余方法DIY电子管FM收音机
2021/03/02 无线电
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python机器学习之决策树算法
2017/12/22 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
django fernet fields字段加密实践详解
2019/08/12 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python 如何对logging日志封装
2020/12/02 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
幼儿教师工作感言
2014/02/14 职场文书
关于保护环境的建议书
2014/08/26 职场文书
新学期开学标语2015
2015/07/16 职场文书
MySQL锁机制
2021/04/05 MySQL
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript