zoukankan      html  css  js  c++  java
  • Swoole 4.5v安装使用

    一、Swoole简介

      Swoole是一个c语言编写的面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCPUDPUnix SocketHTTPWebSocket 服务,提供了PHP语言的异步多线程服务器。

    二、安装准备:

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

      b) php-7.0 或更高版本

      c) gcc-4.8 或更高版本

      d) make

      e) autoconf

      f) pcre (CentOS系统可以执行命令:yum install pcre-devel

    三、PHP7源码安装

      a) 官网下载PHP源码:php-7.2.32.tar.bz2

      b) 解压:sudo tar -jxvf php-7.2.32.tar.bz2

      c) 进入目录:cd php-7.2.32

      d) 编译:./configure  --prefix=/usr/local/php --with-mysqli=mysqlnd --enable-mysqlnd --with-iconv=/usr/local/opt/libiconv  --enable-fpm --enable-sockets

      e) 执行构建:sudo make

      f) 安装:make install

    四、swoole下载安装

      备注:ubuntu没有 phpize可执行命令:sudo apt-get install php-dev 安装phpize

      a) git clone swoole源码:wget https://github.com/swoole/swoole-src/archive/v4.5.2.tar.gz

      b) 解压:tar -zxvf v4.5.2.tar.gz

      c) 进入目录:cd swoole-src-4.5.2

      d) 生成configure配置文件:sudo /usr/local/php/bin/phpize (根据个人情况不同)

      e) 编译配置:./configure --with-php-config=/usr/local/php/bin/php-config

      f) 执行构建安装:make && make install

      g) php.ini配置: php.ini中加入一行 extension=swoole.so 来启用 Swoole 扩展

      h) 查看PHP本进程扩展:/usr/local/php/sbin/php-fpm -m | grep swoole

      i) 查看PHP swoole配置: php --ri swoole

    五、 网络通信引擎

      a) TCP服务:

        i. 创建tcp服务:参考 https://wiki.swoole.com/#/start/start_tcp_server

        ii. 启动tcp服务:php tcp.php  (文件命名根据个人情况而定)

        iii. 命令连接tcptelnet 127.0.0.1 9501 (即可在tcp客户端输入数据)

        iv. php脚本连接tcp:参考 https://wiki.swoole.com/wiki/page/p-client.html

      b) HTTP服务:

        i. 创建http服务:参考https://wiki.swoole.com/wiki/page/326.html

        ii. 启动http服务:php http.php (文件命名根据个人情况而定)

        iii. 请求httpcurl http://127.0.0.1:9502 (端口号根据个人设定)

        

         iv. 静态文件请求配置:

        

         即可通过swoole http的方式直接访问指定静态文件,例如:

         http://local.swoole.com:9501/live/login.html?adp=test

      c) WebSocket服务:

        i. 介绍:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送消息给客户端。

        ii. WebSocket特点:

          1. 建立TCP协议之上

          2. 性能开销小,通信高效

          3. 客户端可以与任意服务器通信

          4. 协议标识符ws wss

          5. 持久化网络通信协议(长连接)

        iii. 创建ws服务:参考https://wiki.swoole.com/wiki/page/397.html

        iv. 配置静态访问:

        

         v. 启动ws服务:php webSocket.php

        vi. 创建ws客户端:

        

         vii. 浏览器发送客户端请求: http://local.swoole.com:9502/ws_client.html

    六、 异步非堵塞IO

      a) 毫秒定时器Timer

        i. 定时执行:int SwooleTimer::tick(int $msec, callable $callback, ...$params); 函数风格别名是swoole_timer_tick

        ii. 一次性定时器SwooleTimer::after(int $msec, callable $callback ...$params);  函数风格别名是swoole_timer_after

        iii. 删除一个定时器:SwooleTimer::clear(int $timer_id);    函数风格别名是swoole_timer_clear

        iv. 清除当前工作进程内的所有定时器SwooleTimer::clearAll();

        v. 查看定时器详情:SwooleTimer::info($timer_id);

        vi. 迭代获取所有定时器IDSwooleTimer::list();

        vii. 设置定时器参数:SwooleTimer::set([ 'enable_coroutine' => false ]);

      b) 异步文件IO系统(异步文件系统仅限于4.3.0之前的版本,后续版本已经全面使用协程(coroutine)代替原有方案,具体参见:Coroutine模块

      c) 异步mysql异步文件系统仅限于4.3.0之前的版本,后续版本已经全面使用协程(coroutine)代替原有方案,具体参见:Coroutine模块

      d) 异步redis异步文件系统仅限于4.3.0之前的版本,后续版本已经全面使用协程(coroutine)代替原有方案,具体参见:Coroutine模块

    七、 进程/内存/协程

      a) 单进程: 参考https://wiki.swoole.com/#/process

        i. 获取进程IDSwooleProcess->pid: int  getmypid()

        ii. 文件描述符:SwooleProcess->pipe;

        iii. 进程构成方法:SwooleProcess->__construct(callable $function, bool $redirect_stdin_stdout = false, int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = false);

        iv. 创建一个进程:SwooleProcess->start(): int|false

        v. 引进协程socket进行进程间通信:SwooleProcess->exportSocket(): SwooleCoroutineSocket|false

        vi. 设置进程名称(mac不支持):SwooleProcess->name(string $name): bool

        vii. 执行一个外部程序SwooleProcess->exec(string $execfile, array $args);

        viii. 关闭进程socketSwooleProcess->close(int $which): bool

        ix. 退出子进程:SwooleProcess->exit(int $status = 0);

        x. 向指定 pid 进程发送信号SwooleProcess::kill(int $pid, int $signo = SIGTERM): bool

        xi. 设置异步信号监听SwooleProcess::signal(int $signo, callable $callback): bool

        xii. 回收结束运行的子进程SwooleProcess::wait(bool $blocking = true): array|false

        xiii. 微秒级别定时器:SwooleProcess::alarm(int $time, int $type = ITIMER_REAL): bool

        xiv. 向管道内写入数据Process->write(string $data) int | bool;

        xv. 向管道内读取数据Process->read() string| bool;

      b) 进程池:参考https://wiki.swoole.com/#/process_pool

      c) 内存table

        i. 配置内存表:SwooleTable->__construct(int $size, float $conflict_proportion = 0.2);

        ii. 获取实际占用内存字节):SwooleTable->memorySize;

        iii. 增加列:SwooleTable->column(string $name, int $type, int $size = 0);

        iv. 执行创建:SwooleTable->create(): bool

        v. 设置行数据:SwooleTable->set(string $key, array $value): bool

        vi. 获取行数据:SwooleTable->get(string $key, string $field = null): array|false

        vii. 自增:SwooleTable->incr(string $key, string $column, mixed $incrby = 1): int

        viii. 自减:SwooleTable->decr(string $key, string $column, mixed $decrby = 1): int

        ix. 是否存在某keySwooleTable->exist(string $key): bool

        x. 统计table条目数:SwooleTable->count(): int

        xi. 删除行:SwooleTable->del(string $key): boolS

      d) 协程:参考https://wiki.swoole.com/#/coroutine_client/init

    八、 系统监控与性能优化

      a) 后台进程方式启动服务:

        i. nohup php server/http_server.php  >/dev/null 2>&1 &

        ii. swoole serverset方法设置进程参数:

        

      b) swoole服务平滑重启(获取进程IDpidof 进程名):

        i. start事件回调中设置进程名称: swoole_set_process_name('test');

        ii. 平滑重启服务(也可通过sh脚本方式执行命令):

        

      c) nginx转发到swoole服务器(9501swoole服务器端口):

        

        

  • 相关阅读:
    Hadoop 回收站
    Sparkstreaming reduceByKeyAndWindow(_+_, _-_, Duration, Duration) 的源码/原理解析
    spark streaming updateStateByKey 用法
    spark streaming 直连 kafka 分区
    sparkStreaming 练习
    json demo
    spark与flume整合
    spark sql 入门
    【面试】c++单例模式
    Python高级笔记(十一)装饰器【面试】
  • 原文地址:https://www.cnblogs.com/zgxblog/p/13531114.html
Copyright © 2011-2022 走看看