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的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文档(暂时还没有……小伙伴们耐心等两天……届时我会给出链接哒)
这里只给出简单介绍。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)
下章预告:swoole的task使用以及实例:简单聊天室
swoole入门教程01-环境搭建及扩展安装相关推荐
- MongoDB最简单的入门教程之一 环境搭建
MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...
- 使用Spring boot搭建Wechat(企业微信)Demo -图文教程 -01 环境搭建
** Spring Boot-Wachat Demo [1] 环境搭建[适用小白的哥哥大白,高手跳过本节,内容主要记录个人搭建所遇到的坑和分享过程] ** Spring boot简介.特点等这里就不过 ...
- C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程
通过本课程的学习,你可以掌握C#编程的重点,享受编程的乐趣. 在本课程之前,你无需具备任何C#的基础知识,只要能操作电脑即可. 不过,希望你的数学不是体育老师教的.好的程序是数理化的实现与模拟.没有较 ...
- python从入门到精通图片_Python从入门到精通之环境搭建教程图解
本章内容: 一.下载python安装包 二.选择适合自己系统的文件,进行下载 Windows环境安装(Windows 10) 三.Python解释器的安装 双击python-3.7.4-amd64.e ...
- php的swoole教程,PHP + Swoole2.0 初体验(swoole入门教程)
PHP + Swoole2.0 初体验(swoole入门教程) 环境:centos7 + PHP7.1 + swoole2.0 准备工作: 一. swoole 扩展安装 1 .下载swoole cd/ ...
- React 全家桶入门教程 01
React 全家桶入门教程 01 前面是基础课程(难度小,略过),后面是案例 目的 巩固react基础知识,查漏补缺(熟悉的部分快进) 学习相关的库的使用 https://study.163.com/ ...
- EXTJS入门教程及其框架搭建
EXTJS是一个兼容AJAX的前台WEB UI的框架,在普通的HTML文件的 BODY 元素中无须写任何HTML代码,就能产生相应的表格等元素. 原创不易,转载请注明出处:EXTJS入门教程及其框架搭 ...
- Java从入门到实战总结-1.1、Java基础之环境搭建和eclipse安装
Java从入门到实战总结-1.1.Java基础之环境搭建和eclipse安装 文章目录 Java从入门到实战总结-1.1.Java基础之环境搭建和eclipse安装 1.Hello Java 1.1. ...
- mysql的安装版本有无开发版_moodle 2.0.2 安装图文教程 2——PHP Mysql环境搭建和moodle安装 - 乔木的日志 - ICT教育 - 中小学信息技术教育和教育信息化网站...
moodle 2.0.2 安装图文教程 2--PHP+Mysql环境搭建和moodle安装 热度 6已有 211 次阅读 2011-3-29 16:49 ||关键词:moodle 2 图文安装教程 p ...
最新文章
- 重磅:辽宁副省长获中国版诺贝尔奖 !2020未来科学大奖揭晓
- Swift 懒性属性
- ABAP实例之ALV
- 如何对java分装,Angular4 JSONP + JAVA代码
- HTTP状态代码及其定义
- Modularity(模块化-CommonJS规范)
- POJ3349 哈希算法
- 最大的连续子段和的O(n)解法
- JAVA生成条码(jbarcode)
- 解密javascript模块载入器require.js
- JAVA各种加密与解密方式(精挑版)
- 医疗健康大数据服务平台技术架构
- html.ex.day02
- java环境_linu安装jdk
- 【论文】开放域段落检索的句子感知对比学习
- 计算机体系结构 第7章 存储系统(2)
- TensorFlow学习笔记——《TensorFlow技术解析与实战》
- MySQL 事务隔离级别,读现象,MVCC
- python语句结束符号_Python从文本中提取hashtags;以标点符号结尾
- 微信小程序系列(4)如何用微信小程序写一个论坛?贴心代码详解(二)评论页
热门文章
- Unity调用摄像头并截图
- c++期末上机oj题目汇总(2018北邮信通版)纯干货
- AndroidO Treble架构下Hal进程启动及HIDL服务注册过程
- 统计分析文章中英文单词出现次数及频率(C++实现)
- [c++primer][14]重载操作符与转换
- 股票交易费及利润计算器
- Sentinel-2 (哨兵2号) 数据批量下载教程 [python]
- CVE-2007-1157(jboss CSRF漏洞)
- 一个简单奇特的升压电路
- 京东获得店铺的所有商品 API