本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境
安装 Swoole PECL 拓展

可以通过 pecl 命令或者通过源码包编译安装,本文采用 pecl 命令来安装 Swoole在命令行输入

$ > pecl install swoole

安装 Swoole PECL 拓展,执行命令后通过php -m命令来检查 Swoole 是否安装成功,如果返回的拓展列表中包含swoole则表明已经安装成功,也可以通过phpinfo来检查 Swoole 是否安装成功。
安装 ThinkPHP5 框架
1.安装 Composer

如果已经安装了 Composer 可以跳过本步骤,但是请确定通过composer self-update命令来确保已经使用了最新版本的
Composer 使用以下命令可以直接通过 Composer 官网下载 Composer.phar
并自动安装到/usr/local/bin/目录下

$ > php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/local/bin/ --filename=composer
$ > composer self-update

如果以上安装过程极慢的话,可以尝试用以下方式通过 Composer 国内镜像来安装。


$ > php -r "readfile('http://install.phpcomposer.com/installer');" | php -- --install-dir=/usr/local/bin/ --filename=composer
$ > composer config -g repo.packagist composer https://packagist.phpcomposer.com
$ > composer self-update

2.安装 ThinkPHP5 框架

使用以下命令把最新版本的 ThinkPHP5 框架安装到当前目录下的 thinkSwooleFirst 文件夹中

$ > composer create-project topthink/think thinkSwooleFirst --prefer-dist

安装 think-swoole Composer 包

把命令行目录切换到 thinkSwooleFirst 目录,通过 Composer 安装 think-swoole


$ > composer require topthink/think-swoole

安装 think-swoole Composer 包之前必须先安装好 Swoole PECL 拓展

HelloSwoole

当环境全部搭建完成后,我们在application/index/controller目录下建立Demon.php文件,用来书写 Swoole 与 ThinkPHP5 的 TCP 服务器的 Hello World

<?php
namespace app\index\controller; // 必须 use 并继承 \think\swoole\Server 类
use think\swoole\Server; class Demon extends Server
{
    // 监听所有地址
    protected $host = '0.0.0.0';
    // 监听 9501 端口
    protected $port = 9501;
    // 指定运行模式为多进程
    protected $mode = SWOOLE_PROCESS;
    // 指定 socket 的类型为 ipv4 的 tcp socket
    protected $sockType = SWOOLE_SOCK_TCP;
    // 配置项
    protected $option = [
        /** 
         *  设置启动的worker进程数
         *  业务代码是全异步非阻塞的,这里设置为CPU的1-4倍最合理
         *  业务代码为同步阻塞,需要根据请求响应时间和系统负载来调整
         */
        'worker_num' => 4,
        // 守护进程化
        'daemonize'  => true,
        // 监听队列的长度
        'backlog'    => 128
    ];     /**
     * 收到信息时回调函数
     * @param \swoole_server $serv swoole_server对象
     * @param $fd TCP客户端连接的文件描述符
     * @param $from_id TCP连接所在的Reactor线程ID
     * @param $data 收到的数据内容
     */
    public function onReceive(\swoole_server $server, $fd, $from_id, $data)
    {
        $server->send($fd, 'onReceive: ' . $data);
    }
}

以上代码即使用 ThinkPHP5 和 Swoole 完成了相对简单的 TCP 服务器,接下来就可以运行服务器使用以下命令即可启动 TCP 服务器

$ > php public/index.php index/Demon/start

我们也可以通过修改配置项deamonize为false,让程序不使用守护进程,更方便我们的调试

使用守护进程方式我们也可以使用lsof工具来检测,端口是否处于正常状态

$ > lsof -i:9501

当确认程序正常运行后,使用telnet工具来连接 TCP 服务器,稍后的文章中我们也会讲述如果使用 swoole 的 TCP 客户端来连接 TCP 服务器

telnet 127.0.0.1 9501

输入hello后会得到以下结果

onReceive: hello

当 Swoole 遇上 ThinkPHP5 世界你好的更多相关文章

  1. PHP 当Swoole 遇上 ThinkPHP5

    本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境 安装 Swoole PECL 拓展可以通过 pecl 命令或者通过源码包编译安装,本文采用 pe ...

  2. Swoole 遇上 PHP会是怎样的结果呢

    一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写 Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪 Swoole是一个php的扩展,它的核心目的就 ...

  3. 当KDS晶振遇上爱普生晶振国内生产厂家该如何抉择?

    当KDS晶振遇上爱普生晶振国内生产厂家该如何抉择?       全球做晶振行业的公司有很多,单说深圳一个城市就有几十上百家正规的晶振厂家,深圳市金洛电子就是其中之一.我们不光代理日本和台湾多家排得上名 ...

  4. dynamic遇上ADO.NET

    传说中的dynamic dynamic是个不合群.不按规则办事的家伙,可以说是个异形,但更恐怖的是它又是无所不知的,任何事情都难不了它(咳咳,它似乎与Lambda表达式是死对头).这令人想起<死 ...

  5. 有奖试读&amp;征文--当青春遇上互联网,是否能点燃你的创业梦

    时至今日,互联网已经切入我们每一个人的工作.生活和学习的每一个角落.利用互联网这个工具,有人游戏,有人购物,有人上课,有人交友,而有那么一部分人去利用它完毕人生最完美的逆袭.相信每一个人心中都有个创业 ...

  6. 当微信小程序遇上filter~

    在微信小程序的开发过程中,当你想要实现不同页面间的数据绑定,却为此抓耳饶腮时,不妨让微信小程序与filter 来一场完美的邂逅,相信会给你带来别样的惊喜~ 前段时间被安利了一个很实用的公众号-前端早读 ...

  7. TODO:macOS上ThinkPHP5和Semantic-UI集成

    TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...

  8. MVC遇上bootstrap后的ajax表单模型验证

    MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...

  9. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

随机推荐

  1. 保存html代码

    function svcode(F) { if (document.all) { var F = $id(F); var E = window.open("", "_bl ...

  2. EFI/UEFI BIOS启动

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主开机纪录分区表.但因为MBR分区表不支持容量 ...

  3. spring-boot 实现文件上传下载

    @Controller public class FileUploadCtrl { @Value("${file.upload.dir}") private String path ...

  4. dom4j解析以及生成xml字符串测试

    public static void main(String[] args) { String xmlStr = "<ybjcVo>"+ "<zbGri ...

  5. JAVA的PreparedStatement和addBatch()方法

    本文介绍两个内容,为什么使用PreparedStatement的addBatch()方法?以及使用PreparedStatement的好处. 一.addBatch使用方法 昨天用JAVA做了一个导表的 ...

  6. 演示一下:rm -rf /

  7. excel如何快速实现数据区域的框选

    这里会存在2个情况,一个是快速的选择一行或者一列的数据,另外一个是快速的选择一块的数据(数据区域) 1.当有上万条数据时,怎么快速的选择一行或一列的数据? 方法:将鼠标放在需要选择的数据区域的开头位置 ...

  8. python之函数用法get()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法get() #http://www.runoob.com/python/att-dic ...

  9. Window磁盘错误修复chkdsk

    场景: 狗日的垃圾移动磁盘.U盘质量太差劲,会出现磁盘坏道.读写异常~心疼数据.... 命令: 01.Win+R 调出cmd 02.根据移动盘符或磁盘盘符,进行修复 03.执行修复chkdsk /f  ...

  10. C#几个小知识点

    一.float数据类型 小数在C#中需要用浮点型表示,浮点值就是.后面的小数点.C#语言中有两种小数类型,分别为32位单精度浮点型(float) 和64位双精度浮点型(double).其中精度指的是小 ...