首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php+Swoole——编译安装

1.Swoole编译安装步骤

Swoole扩展是按照php标准扩展构建的。使用phpize来生成php编译配置,./configure来做编译配置检测,make进行编译,make install进行安装。

请下载releases版本的swoole,直接从github主干上拉取最新代码可能会编译不过

如果当前用户不是root,可能没有php目录的写权限,安装时需要sudo或者su

如果是在git分支上直接git pull更新代码,重新编译前务必要执行make clean

安装准备

安装swoole前必须保证系统已经安装了下列软件

php-5.3.10或更高版本gcc-4.4或更高版本makeautoconf

下载地址

https://github.com/swoole/swoole-src/releases

http://pecl.php.net/package/swoole

http://git.oschina.net/matyhtf/swoole

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

cdswoolephpize./configuremake sudo make install

(注:swoole的./configure有很多额外参数,可以通过./configure --help命令查看,这里仅开启其中async-mysql项,其他均选择默认项) 这里是./configure编译配置的额外参数,用于开启某些特性

1.8.7或更高版本不再需要设置--enable-async-mysql和--enable-async-httpclient,async_mysql和async_httpclient改为内置

--enable-swoole-debug

打开调试日志,开启此选项后swoole将打印各类细节的调试日志。生产环境不要启用。

--enable-sockets

增加对sockets资源的支持,依赖sockets扩展。开启此参数,swoole_event_add就可以添加sockets扩展创建的连接到swoole的事件循环中。

--enable-async-mysql

增加异步mysql支持, 依赖mysqli和mysqlnd扩展。

--enable-async-redis

增加异步Redis客户端支持, 依赖hiredis库

--enable-async-httpclient

增加异步Http和WebSocket客户端支持

--enable-ringbuffer

开启RingBuffer内存池

此设置为试验性质,主要用于提升性能,生产环境请不要开启

--enable-openssl

启用SSL支持

--with-php-config=/url/local/php/bin/php-config

PECL

swoole项目已收录到PHP官方扩展库,除了手工下载编译外,还可以通过PHP官方提供的pecl命令,一键下载安装swoole

peclinstall swoole

配置php.ini

编译安装成功后,修改php.ini加入

extension=swoole.so

通过php -m或phpinfo()来查看是否成功加载了swoole,如果没有可能是php.ini的路径不对,可以使用php -i grep php.ini来定位到php.ini的绝对路径。

安装成功后通过phpinfo()查看到的信息:

2.构建一个Swoole基本实例

下面贴一个基本的基于swoole的echo服务器

// Server

classServer{

private$serv;

publicfunction__construct() {

$this->serv=newswoole_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();

}

publicfunctiononStart($serv) {

echo"Start\n";

}

publicfunctiononConnect($serv,$fd,$from_id) {

$serv->send($fd,"Hello {$fd}!");

}

publicfunctiononReceive(swoole_server$serv,$fd,$from_id,$data) {

echo"Get Message From Client {$fd}:{$data}\n";

}

publicfunctiononClose($serv,$fd,$from_id) {

echo"Client {$fd} close connection\n";

}

}

// 启动服务器

$server=newServer();

从代码中可以看出,创建一个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处处理客户端下线的事件。

下面贴出客户端的代码:

classClient{

private$client;

publicfunction__construct() {

$this->client=newswoole_client(SWOOLE_SOCK_TCP);

}

publicfunctionconnect() {

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=newClient();

$client->connect();

这里,通过swoole_client创建一个基于TCP的客户端实例,并调用connect函数向指定的IP及端口发起连接请求。随后即可通过recv()和send()两个函数来接收和发送请求。需要注意的是,这里我使用了默认的同步阻塞客户端,因此recv和send操作都会产生网络阻塞。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180205G0RZ3Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券