本文假设你已经有了 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. Linux中使用GoAccess进行日志实时监控

    一.用法命令: goaccess access_log -o /var/www/html/report.html --real-time-html 说明:请先安装Httpd和Goaccess 二.效果 ...

  2. hadoop 文件合并

    来自:http://blog.csdn.net/dandingyy/article/details/7490046 众所周知,Hadoop对处理单个大文件比处理多个小文件更有效率,另外单个文件也非常占 ...

  3. javascript用正則表達式检測username的合法性

    在用户登录.用户注冊时经常须要对username如邮箱.手机号进行校验,一般经常使用表达式. 以下整理对邮箱和手机号的表达式校验: function checkUser(){ var userName ...

  4. Artistic Style在windows下的使用(C/C++)

    ArtisticStyle是一个开源的源码格式化工具.主页地址为:http://astyle.sourceforge.net/,它能够应用在C.C++.Objective-C.C#.Java等程序语言 ...

  5. django之创建第4-1个项目-访问dict数据

    1.修改index.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  6. python 怎么模拟加header(如User-Agent、Content-Type等等)

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...

  7. Python yield 使用

    老是看到好的文章,不由自主的收集过来. 原文链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ 廖大写的, ...

  8. 使用std::find_if提取序列容器的子串

    一个需求是这样的,一个vector容器中,我需要提取满足一定条件的元素的序列.就比如,一个树形结构,我把该接口拍扁成vector容器,每个节点都有一个惟一ID. 以下就是根据特定的ID查找节点下的子节 ...

  9. 什么样的路由器有类似改hosts的功能

    2011-7-22 23:06:45 如题 就是像电脑上改hosts那样把某个域名强制解析到指定IP上 TT,DD和openwrt有没有这样的功能? ------------------------- ...

  10. 接口测试-Http状态码-postman上传文件

    转自:https://www.cnblogs.com/jiadan/articles/8546015.html 一. 接口   接口:什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统 ...