swoole新手教程01-环境搭建及扩展安装
写在前面的废话
《swoole源代码分析》已经写了13章,整个swoole的核心架构基本都分析的差点儿相同了。于是心里一直以来想整理swoole的文档并写一份教程的想法就再度浮了出来。
实话说,我接触swoole乃至接触PHP都仅有9个月的时间。而自7月份以来一直在公司做Android开发。也有没有了使用swoole的机会。所以,如今我仅仅能写出一份入门级教程,帮助刚刚接触swoole的人理解和使用swoole写一些简单的样例。从而初步掌握-swoole的使用方法。
Git地址:https://github.com/LinkedDestiny/swoole-doc
第一章
环境搭建及扩展安装
环境说明: 系统:Ubuntu14.04 (安装教程包含CentOS6.5)
PHP版本号:PHP-5.5.10
swoole版本号:1.7.6-stable
PHP安装
要用swoole。首先须要有PHP环境。因为swoole的某些特性,最好是可以从源代码编译安装PHP。这样在使用过程中可以避免非常多不必要的错误。
PHP下载地址: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
(注:以上命令是我在实际使用中验证过的能够使用的,可能会和其它教程提供的命令不同) 当上述命令运行后,就可以開始安装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 尽量选择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的echoserver
// 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文档(临时还没有……小伙伴们耐心等两天……届时我会给出链接哒)
这里仅仅给出简介。onStart回调在server执行前被调用,onConnect在有新client连接过来时被调用,onReceive函数在有数据发送到server时被调用。onClose在有client断开连接时被调用。
这里就能够大概看出怎样使用swoole:在onConnect处监听新的连接;在onReceive处接收数据并处理。然后能够调用send函数将处理结果发送出去;在onClose处处理client下线的事件。
以下贴出client的代码:
<?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的client实例。并调用connect函数向指定的IP及port发起连接请求。
随后就可以通过recv()和send()两个函数来接收和发送请求。
须要注意的是。这里我使用了默认的同步堵塞client,因此recv和send操作都会产生网络堵塞。
(以上两段代码均以上传git,地址:https://github.com/LinkedDestiny/swoole-doc/tree/master/src/01)
下章预告:swoole的task使用以及实例:简单聊天室
swoole新手教程01-环境搭建及扩展安装的更多相关文章
- 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布
Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...
- MyBatis实例教程--开发环境搭建
MyBatis实例教程--开发环境搭建 准备工作: 1.mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包 ...
- 总结Vue 第四天:vue-cli(Vue2.0 新手入门 — 从环境搭建到发布)
总结Vue 第四天:vue-cli(Vue2.0 新手入门 - 从环境搭建到发布) 一.Vue CLI----(Vue2.0 新手入门 - 从环境搭建到发布): ■ CLI是Command-Lin ...
- LNMP环境搭建:Nginx安装、测试与域名配置
Nginx作为一款优秀的Web Server软件同时也是一款优秀的负载均衡或前端反向代理.缓存服务软件 2.编译安装Nginx (1)安装Nginx依赖函数库pcre pcre为“perl兼容正则表达 ...
- LNMP环境搭建之php安装,wordpress博客搭建
LNMP环境搭建之php安装,wordpress博客搭建 一.介绍: 1.什么是CGI CGI全称是"通用网关接口"(Common Gateway Interface),HTTP服 ...
- Tesseract环境搭建及编译安装
Tesseract环境搭建及编译安装 Tesseract源码都是C++源码:对于不咋会C++的人来说,这真是...虽然说语言有相通性,但是...哎!!!!! 分享出来,也希望对大家有所帮助. 环境:w ...
- Python环境搭建和pycharm安装
Python环境搭建和pycharm安装 本人安装环境为Windows10系统,下载的Python版本为3.4社区版本,可参考 1.下载Python3.4版本 官网:https://www.pytho ...
- 初学者易上手的SSH-struts2 01环境搭建
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
- Flutter 即学即用系列博客——01 环境搭建
前言 工欲善其事,必先利其器 所以第一篇我们来说说 Flutter 环境的搭建. 笔者这边使用的是 MAC 电脑,因此以 MAC 电脑的环境搭建为例. Windows 或者 Linux 也是类似的操作 ...
随机推荐
- Brain Powerd计划
Brain Powerd这片子没有高清的版本,只有DVD..(我手上只有个DVDRip,X2字幕组的)同时字幕质量也不行. 开个坑用waifu2x压个好看一点(用DVDRip)的,码率大概是3.3M ...
- 分布式文件系统FastDFS集群部署
1.源码开放下载地址:https://github.com/happyfish100 早期源码开放下载地址:https://sourceforge.net/projects/fastdfs/files ...
- Linux基础值定时任务
Linux计划任务:列行公事 在Linux中,通过crontab与at这两个来实现这些功能 at:是一个可以处理仅执行一次就结束的指令 crontab:把你指定的工作或任务,按照你设定的周期一直循环执 ...
- java递归处理文件夹和文件
import java.io.File; /** * 文件综合使用示例 */ public class FileDelete { public static void main(String[] ar ...
- POJ 2635 The Embarrassed Cryptographer (千进制,素数筛,同余定理)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15767 A ...
- Eclipse与MyEclipse增强代码提示
Eclipse默认是敲入"."之后有代码提示,但假如我们想在敲入类似sys有System的提示,则需要修改一下Eclispe的配置来达到这个效果. 具体配置方法如下: 点Windo ...
- EasySlider-最简洁的JQuery滚动插件 可控制滚动
原文发布时间为:2010-05-05 -- 来源于本人的百度文章 [由搬家工具导入] Easy Silder是由Alen Grakalic开发的基于JQuery的滚动插件,它支持以下功能: 1.自动滚 ...
- tomcat 多实例的Sys V风格脚本
-------------------------------------------------[翠花,上脚本]------------------------------------------- ...
- WSL学习:安装ArchLinux和Root/Cling以及注意事项
1.前言 在Windows下使用Linux常见的软件存在许多困难.选择之一是使用VMWare和VirtualBox之类的虚拟机软件,另一种选择是使用类UNIX模拟环境,如Cygwin,GNUWin32 ...
- ios圆角优化-不掉帧
因网络图片加载用的是SDWebImage所以下面以sd加载图片为例 //普通的加载网络图片方式(已不能满足需求,需要改进) [self sd_setImageWithURL:url placehold ...