PHP 当Swoole 遇上 ThinkPHP5
本文假设你已经有了 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工具来检测,端口是否处于正常状态
我们也可以通过修改配置项deamonize为false,让程序不使用守护进程,更方便我们的调试
使用守护进程方式我们也可以使用lsof工具来检测,端口是否处于正常状态
$ > lsof -i:9501
当确认程序正常运行后,使用telnet工具来连接 TCP 服务器,稍后的文章中我们也会讲述如果使用 swoole 的 TCP 客户端来连接 TCP 服务器
telnet 127.0.0.1 9501
输入hello后会得到以下结果
onReceive: hello
phper在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的(点击→)我的官方群677079770
PHP 当Swoole 遇上 ThinkPHP5的更多相关文章
- 当 Swoole 遇上 ThinkPHP5 世界你好
本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境 安装 Swoole PECL 拓展 可以通过 pecl 命令或者通过源码包编译安装,本文采用 p ...
- Swoole 遇上 PHP会是怎样的结果呢
一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写 Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪 Swoole是一个php的扩展,它的核心目的就 ...
- TODO:macOS上ThinkPHP5和Semantic-UI集成
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
- MVC遇上bootstrap后的ajax表单模型验证
MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...
- 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)
邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...
- 初识genymotion安装遇上的VirtualBox问题
想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...
- SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案
SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...
随机推荐
- RF用例执行方法
用例如下图: 1.执行整个项目下的所有用例 dos命令下输入robot D:\work_doc\RF (RF为下图中脚本项目Test目录的上级目录) 2.执行某个suite中的所有用例 dos命令下输 ...
- 「看完不后悔系列!」Maya的建模小技巧
Maya 将最大的联合影响力降至最低 最大的联合影响力是游戏角色装备的已知要求. 但是,对于每种类型的生产来说,这实际上都是一个很好的工作流程. 从透视图上看,如果你将联合影响力从4更改为5,则不一定 ...
- C 自删除技术---批处理方式
#include<stdio.h> #include<windows.h>#pragma comment(linker, "/subsystem:\"win ...
- Windows 7 SP1官方原版ISO系统镜像所有版本下载集合
========================================================================== Windows 7 With SP1 32位简体中 ...
- php 学习编译扩展
原文 : http://kimi.it/496.html 系统环境 : Ubuntu 目标 : 可以像 php 提供的内部函数一样,使用 myecho 函数 : 输出如下 : 1. 获取 php 的源 ...
- 使用face-api.js实现人脸识别(一)
功能 第一阶段实现对图片中人脸的识别并打上标签(比如:人名) 第二阶段使用摄像头实现对人物的识别,比如典型的应用做一个人脸考勤的系统 资源 face-api.js https://github.com ...
- 解决Dubbo 2.7.3版本使用ConfigCenterConfig集成Apollo No Provider found的问题
Dubbo 2.7.3 集成Apollo 问题描述 Dubbo 2.7.3支持配置中心外部化配置, 因此只需要定义一个ConfigCenterConfig的Bean. @EnableDubbo(sca ...
- Linux生产下安装db2V10.1
Db210.1版本安装手册 装新的suse系统后需要做以下几步才能完整安装10.1版本的db2 1.要挂载2个iso文件 首先在跟目录下建目录test1和test2 2.把iso文件挂载到目录下 ...
- java和python对比
一:解释性和编译型 梳理 编译型:源代码经过编译直接变为二进制的机器语言,每次都可以直接重新运行不需要翻译.典型的就是c语言. 解释性:java和python都是解释型,源代码经过编译变为字节码文件, ...
- MIT线性代数:8.求解Ax=b,可解性和结构