> 环境说明:
> 系统:Ubuntu14.04 (安装教程包括CentOS6.5)
> PHP版本:PHP-5.5.10
> swoole版本:1.7.6-stable
## PHP安装
要用swoole,首先需要有PHP环境。由于swoole的某些特性,最好是能够从源码编译安装PHP,这样在使用过程中可以避免很多不必要的错误。 PHP下载地址:[http://php.net/](http://php.net/) 在这里挑选你想用的版本即可。下载源码包后,解压至本地任意目录(保证读写权限),留待使用。 安装PHP前,需要安装编译环境和PHP的相关依赖。下面是相关命令: Ubuntu环境下:
~~~
sudo apt-get install build-essential gcc g++ autoconf libiconv-hook-dev libmcrypt-dev libxml2-dev libmysqlclient-dev libcurl4-openssl-dev libjpeg8-dev libpng12-dev libfreetype6-dev
~~~
CentOS环境下:
~~~
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers gd gd2 gd-devel gd2-devel perl-CPAN pcre-devel
~~~
(注:以上命令是我在实际使用中验证过的可以使用的,可能会和其他教程提供的命令不同) 当上述命令执行后,即可开始安装PHP。命令如下:
~~~
cd php-5.5.10/
./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --enable-fpm --enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring --disable-rpath --disable-debug --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pcre-regex --with-iconv --with-zlib --with-mcrypt --with-gd --with-openssl --with-mhash --with-xmlrpc --with-curl --with-imap-ssl
sudo make
sudo make install
sudo cp php.ini-development /etc/php/
~~~
至此,PHP已经成功安装,但是此时在终端里是无法直接通过php --version查看php版本的还需要将PHP的可执行目录添加到环境变量中。 使用Vim/Sublime打开~/.bashrc,在末尾添加如下内容:
~~~
export PATH=/usr/local/php/bin:$PATH
export PATH=/usr/local/php/sbin:$PATH
~~~
保存后,终端输入命令:
~~~
source ~/.bashrc
~~~
此时即可通过php --version查看php版本,看到如下内容:
~~~
PHP 5.5.10 (cli) (built: Apr 26 2014 09:46:14)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
~~~
即说明安装成功。
## Swoole安装
安装完PHP后,即可安装swoole扩展。 swoole扩展下载地址:[https://github.com/swoole/swoole-src/releases](https://github.com/swoole/swoole-src/releases) 尽量选择stable版本,alpha版本最好仅用于实验新特性。 解压源码至任意目录,执行如下命令:
~~~
cd swoole-src-swoole-1.7.6-stable/
phpize
./configure --enable-async-mysql
sudo make
sudo make install
~~~
(注:swoole的./configure有很多额外参数,可以通过./configure --help命令查看,这里仅开启其中async-mysql项,其他均选择默认项) 安装完成后,进入/etc/php目录下,打开php.ini文件,在其中加上如下一句:
~~~
extension=swoole.so
~~~
随后在终端中输入命令
~~~
php -m
~~~
查看扩展安装情况。如果在列出的扩展中看到了swoole,则说明安装成功。
## 基本实例
下面贴一个基本的基于swoole的echo服务器
~~~
// Server
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();
~~~
从代码中可以看出,创建一个swoole\_server基本分三步:
1. 通过构造函数创建swoole\_server对象
2. 调用**set**函数设置swoole\_server的相关配置选项
3. 调用**on**函数设置相关回调函数 关于set配置选项以及on回调函数的具体说明,请参考我整理的swoole文档( [配置选项](https://github.com/LinkedDestiny/swoole-doc/blob/master/doc/01.swoole_server%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9.md))
这里只给出简单介绍。onStart回调在server运行前被调用,onConnect在有新客户端连接过来时被调用,onReceive函数在有数据发送到server时被调用,onClose在有客户端断开连接时被调用。 这里就可以大概看出如何使用swoole:在onConnect处监听新的连接;在onReceive处接收数据并处理,然后可以调用send函数将处理结果发送出去;在onClose处处理客户端下线的事件。
下面贴出客户端的代码:
~~~
<?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();
~~~
这里,通过swoole\_client创建一个基于TCP的客户端实例,并调用connect函数向指定的IP及端口发起连接请求。随后即可通过recv()和send()两个函数来接收和发送请求。需要注意的是,这里我使用了默认的同步阻塞客户端,因此recv和send操作都会产生网络阻塞。
(以上两段代码均以上传git,地址:[https://github.com/LinkedDestiny/swoole-doc/tree/master/src/01)](https://github.com/LinkedDestiny/swoole-doc/tree/master/src/01%EF%BC%89)
- 序言
- 数据库操作
- 自定义数据操作
- DBCreate
- DBUpdate
- DBList
- DBDelete
- 事务
- 插入数据
- 更新数据
- 验证场景
- ✦事务队列✦
- DBWhere
- 分页
- 分类
- 新增分类
- 编辑分类
- 删除分类
- 分类数据
- Excel
- 数据验证
- 自定义验证类
- Where技巧
- 标签和文章
- tag数据库
- TagManager
- 标签管理页面
- 标签列表页
- 新增标签
- 编辑标签
- 删除标签
- 标签&文章
- 新建标签文章
- 更新标签文章
- 删除标签文章
- 界面
- 【官方】ME.js
- 【官方】jquery-mini-enjoy.js
- bootstrap
- 前端错误页面模板
- 后台界面
- 后台页面模板框架
- 后台左边菜单
- 后台页面控制
- Search表单
- 基础界面
- Panel-Tab
- Panel-Tab基础
- 前端
- IOS禁止页面滚动
- layer技巧
- JS中通过LayUI弹出文本输入层,多个按钮回调
- 表单-Ajax
- token
- 表单验证+Ajax提交
- 前端验证
- 后端验证
- ajax
- checkbox 全选
- ajaxUploader
- ajaxText
- ajax-get
- ajax-input
- 文章
- CRM
- 用户模块
- User
- LoginData
- UserLogin
- UserUpdate
- 商城
- 商品表+SKU
- 购物车
- 订单
- 创建订单-来至于购物车
- 创建订单-来至于立即购买
- 取消订单
- 卡券
- 卡券数据库
- 插件
- 单图片上传插件
- search 搜索插件
- 富文本编辑器
- 表单零部件
- 单文件上传
- Form表单插件
- 隐藏表单
- 标题文字单行
- 文本
- 下拉框select
- CheckBox
- 单图片
- textarea
- 文件上传
- 颜色选择器
- 标签
- 微信
- jssdk
- 自定义回复
- 网页授权流程
- 网页授权
- 用户信息
- 公众号对接配置
- 第三方类库
- VUE库
- php 第三方
- H5库
- 小程序
- 消息队列 Beanstalkd
- API-3
- chrome-开发
- 采集QueryList
- moment.php
- Helper类库
- PageHistory
- FileWeChat
- Text
- Mini-Enjoy
- TODO-LIST
- 视频
- CSS
- 技术文章
- 【shop】订单延时
- IDE&工具
- system
- 路由
- swoole
- 关闭守护进程
- 基于swoole的定时器程序,支持秒级处理
- 测试
- 客户端
- 服务器端
- 入门篇
- 环境搭建及扩展安装
- Swoole的Task使用以及swoole_client
- Timer定时器、心跳检测及Task进阶实例:mysql连接池
- Swoole多端口监听、热重启以及Timer进阶:简单crontab
- Swoole的自定义协议功能的使用
- 命令行模式
- 控制台命令
- 使用Console命令、快捷方式和内建命令
- 理解控制台参数是如何被操作的
- 如何使用提问
- 如何对命令行进行彩色和样式输出
- ★如何从控制器中调用一个命令★
- 控制台输出(参数和选项)
- 冗长级别
- 自定义命令
- RestAPI
- 设计规范
- API
- 商品分类+数据
- [小程序]-新增用户登录
- 外卖平台
- 设计
- 扩展
- SSL
