PHP异步网络通信引擎-Swoole的安装与应用

小天天天天    PHP    999+ 次    2018-08-09 16:07:57


Swoole可以让PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。

Swoole简介

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

除了异步 IO 的支持之外,Swoole 为 PHP 多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发 HashTable,Channel,Lock,进程间通信IPC等丰富的功能特性。

Swoole2.0 支持了类似 Go 语言的协程,可以使用完全同步的代码实现异步程序。PHP 代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。

简单的说,Swoole增强了PHP的应用能力,以前PHP做不到的或者很难做到的,现在借助SWoole就能轻松实现。

Swoole是开源免费的,企业和个人开发者均可免费使用Swoole的代码。

源码编译安装

所需环境

  • CentOS7.4
  • PHP7.2

下载源码包

源码下载地址:https://github.com/swoole/swoole-src/releases。截至目前swoole已经发布了4.0版本了,我们给大家演示的是2.1版本的。

编译

接下来就是解压编译。注意PHP的安装路径请参照本站文章:CentOS7 源码编译安装PHP7.2

Code:

  1. tar -zxvf swoole-src-2.1.2.tar.gz
  2. cd swoole-src-2.1.2
  3. phpize
  4. ./configure --with-php-config=/usr/local/php/bin/php-config
  5. make
  6. make install

将Swoole加入到PHP中

Code:

  1. echo 'extension=swoole.so' >> /usr/local/php/etc/php.ini

重启php-fpm

Code:

  1. /etc/init.d/php-fpm restart

验证

输入命令:

Code:

  1. php -m | grep swoole

如果返回swoole字样则安装成功。

或者使用phpinfo()函数,查看swoole是否安装成功。

应用示例

HTTP Server

Code:

  1. $http = new swoole_http_server("127.0.0.1", 9501);
  2. $http->on("start", function ($server) {
  3. echo "Swoole http server is started at http://127.0.0.1:9501\n";
  4. });
  5. $http->on("request", function ($request, $response) {
  6. $response->header("Content-Type", "text/plain");
  7. $response->end("Hello World\n");
  8. });
  9. $http->start();

WebSocket Server

Code:

  1. $server = new swoole_websocket_server("127.0.0.1", 9502);
  2. $server->on('open', function($server, $req) {
  3. echo "connection open: {$req->fd}\n";
  4. });
  5. $server->on('message', function($server, $frame) {
  6. echo "received message: {$frame->data}\n";
  7. $server->push($frame->fd, json_encode(["hello", "world"]));
  8. });
  9. $server->on('close', function($server, $fd) {
  10. echo "connection close: {$fd}\n";
  11. });
  12. $server->start();

异步任务Task

Code:

  1. $server = new swoole_server("127.0.0.1", 9502);
  2. $server->set(array('task_worker_num' => 4));
  3. $server->on('receive', function($server, $fd, $reactor_id, $data) {
  4. $task_id = $server->task("Async");
  5. echo "Dispath AsyncTask: [id=$task_id]\n";
  6. });
  7. $server->on('task', function ($server, $task_id, $reactor_id, $data) {
  8. echo "New AsyncTask[id=$task_id]\n";
  9. $server->finish("$data -> OK");
  10. });
  11. $server->on('finish', function ($server, $task_id, $data) {
  12. echo "AsyncTask[$task_id] finished: {$data}\n";
  13. });
  14. $server->start();

更多有关Swoole的使用和手册请参考官网:https://www.swoole.com/


如果你觉得本篇文章对您有帮助,请打赏作者

上一篇: PHP操作PDO、预处理以及事务

下一篇: CentOS7 源码编译安装PHP7.2

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:484

今日UV/PV/IP:2/2/2

昨日UV/PV/IP:9/10 /8

TOP