Swoole

Cygwin下安装Linux PHP环境和Swoole扩展并在PHPStorm中调试

我是研究僧i 提交于 2019-12-01 03:29:19
这边博文的目的有以下几点: 1、Win下安装cygwin 2、在cygwin中安装php环境和php开发环境 3、安装swoole扩展 4、设置PHPStorm和cygwin完成PHPStrom的远程调试配置 以下是正文部分: 1、Win下安装Cygwin 在Cygwin的官网下载Cygwin安装包,这儿提供64位安装包的下载地址: https://cygwin.com/setup-x86_64.exe 如下界面中我选择了ustc的镜像站点,你可以选择对应你所在国家的站点就行 在如下界面中需要通过搜索安装php的相关环境,注意这儿要选上php-devel,这样才能使用编译安装的方式安装swoole扩展。需要安装的环境有:pecl/automake/gcc/gcc-c++,其它需要安装的php扩展由你自己决定 以上步骤完成基本上代表Cygwin的环境安装完成,接下来需要配置Win的环境变量。 2、在cygwin中安装php环境和php开发环境 设置环境变量,这一步后面发现其实也可以省略掉。。。。 3、安装swoole扩展 运行Cygwin的命令行,运行方式在Cygwin的安装目录下有个Cygwin.bat,双击运行即可。 在命令行中输入 php -v 会输出php的版本信息 然后使用 pecl install swoole xdebug 安装swoole和xdebug扩展

docker 构建php-fpm 7.2(swoole) 镜像

自闭症网瘾萝莉.ら 提交于 2019-11-30 04:34:05
mkdir -p ~/mnt/docker/php mkdir -p ~/mnt/docker/php #下载swoole-2.2.0.tgz安装包到software 下载地址:http://pecl.php.net/package/swoole/2.2.0 #创建Dockerfile vim ~/docker/php/Dockerfile #================================Dockerfile================================= FROM daocloud.io/php:7.2-fpm-alpine LABEL maintainer="yjwang088@163.com" COPY ./swoole-2.2.0.tgz /tmp/ WORKDIR /usr/src/swoole # 修改镜像源 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 安装依赖,核心扩展,pecl扩展,git,composer,npm工具 RUN apk update && apk add --no-cache --virtual .build-deps \ $PHPIZE_DEPS \ curl-dev \

windows下安装PHP的swoole拓展

笑着哭i 提交于 2019-11-29 20:44:37
最近在研究实时通讯,这就需要用到swoole技术,在php中是可以安装swoole拓展的,那么在windows环境下如何安装swoole拓展呢? 但遗憾的是PHP的swoole拓展是无法安装在windows环境下的,那么这就说明在windows环境下我们无法安装PHP的swoole拓展了吗?答案当然是否定的,我们只需要安装Cygwin来模拟linux环境,这样我们就可以在windows环境下安装PHP的swoole拓展了 一:下载Cygwin和swoole Cygwin下载地址: https://www.cygwin.com/ PHP的swoole拓展下载地址: https://pecl.php.net/package/swoole 二:安装Cygwin 安装Cygwin注意点 1:选择镜像来源 2:需要安装的软件(你也可以选择性安装) (1):安装binutils (2):安装gcc-core,gcc-g++ (3):安装gdb (4)安装php环境 (5):安装pcre-devel (6):安装autoconf (7)安装php-json(这是由于我会用到php的json_decode()命令,所以需要安装php-json) (8)选择好你要安装的软件后选择下一步 以上就是安装Cygwin的注意事项 三:安装php的swoole拓展 1

Curl 在 Swoole 协程中的解决方案

爷,独闯天下 提交于 2019-11-29 09:33:24
众所周知,在 Swoole 应用中,是不推荐使用 Curl 的,因为 Curl 会阻塞进程。 本文会用实际的代码和数据,用最直观的方式,让你明白为什么。 最后还会给出 Curl 在 Swoole 中的解决方案,如果不想看分析可以直接拉到最后。 例程对比 宇润看文章不喜欢那些虚的,所以自己写也比较实在,直接来跑一下代码,用数据看为什么不推荐在 Swoole 使用 Curl。 为了偷懒,我直接用了 YurunHttp 的 Curl 和 Swoole Handler,来替代那些又臭又长的 Curl 代码。 代码 composer.json { "require": { "yurunsoft/yurun-http": "~3.0" } } server.php <?php $http = new Swoole\Http\Server('127.0.0.1', 9501); $http->on('workerstart', function(){ \Swoole\Runtime::enableCoroutine(); }); $http->on('request', function ($request, $response) { sleep(1); // 假设各种处理耗时1秒 $response->end($request->get['id'] . ': ' . date('Y-m-d H

Swoole 自定义项目初始化事件处理的实现

£可爱£侵袭症+ 提交于 2019-11-29 06:50:37
最近使用基于 Swoole 开发的 imi 框架 开发项目,碰到一个需求,就是想要做项目初始化处理。当初始化处理完成前,不想让 Swoole 处理请求。因为可能有一些值没有加载进来,处理请求极有可能出现问题。 下面给出了思考过程及解决问题的demo代码。 首先分析了一下,Swoole 是多进程模式运行的,分为 Master、Manager、Worker 进程。 Master 进程就是我们启动服务的 cli 命令文件所在进程,在这里面初始化有一个问题,这里所有加载的类、全局变量,其它 Worker 进程里都可以使用,无法热重启生效。 Manager 进程的情况基本和上面差不多。 那么只有在 Worker 进程做处理了,但如果写在 WorkerStart 事件里,每个 Worker 进程都会去执行。 WorkerStart 事件定义: function onWorkerStart(swoole_server $server, int $worker_id); $worker_id是一个从0-$worker_num之间的数字,表示这个Worker进程的ID 那这个就好办了,直接判断workerid为0的去触发项目初始化事件。剩下还有一个问题就是,如何在初始化执行完成前,让所有 Worker 进程暂时都不处理请求。 思考并尝试了一下,这个问题可以通过协程挂起来解决,demo 代码如下: <

tp5.1.38 支持原生swoole 需要注意的问题

拥有回忆 提交于 2019-11-28 19:43:46
1. 执行某个控制器的方法时( http://test.com:9501/?s=index/index/test )其中这个方法必须是return 否则会报错 2.修改thinkphp源码 thinkphp\library\think\Request.php 修改public function pathinfo()方法 注释 if (is_null($this->pathinfo)) {判断条件注释掉 修改public function path()方法 注释 if (is_null($this->path)) {判断条件注释掉 修改(解决获取不到请求参数的问题报错method not exists:think\Request->filterValue) private function filterValue(&$value, $key, $filters) 改为 public function filterValue(&$value, $key, $filters) 需要注意的是,tp5.1.38这个版本在 $http->on('request', function ($request, $response) {} 中不需要重写server和header 来源: https://my.oschina.net/u/3840669/blog/3098724

PHP实现单人多人聊天源码免费分享 | 电脑报修系统

心不动则不痛 提交于 2019-11-28 09:56:34
源码清单 1. 简易版登陆式聊天源码。 2. 电脑报修轻系统源码。 3. 关注下面公众号回复“聊天”,免费获取。 聊天系统 虽然微信,QQ是即时通讯的元老。但是他们限制很多,所以很多人都想做一个自己的聊天应用。不管是web还是APP,PHP都可以为其服务。目前通过PHP实现即时通讯类的框架有swoole,workman等等。以下虽然是web版的,但也可以通过uni-app或者其他平台做一个混合APP。下面就截一些图大概浏览一下。 1. 登陆和普通登陆实现方式差不多。 2. 首页两个群组,由于也是之前试着玩所以也没做到多少,基本的信息接收和最近消息展示等。 3. 可以进入群组开始聊天,群内用户可以接收到信息,单聊同理。 4. 这个我很久没有更新修改了,我放在了,到时候大家也可以新建分支进行修改。因为最近在做一个也有聊天功能并且带聊天红包的APP项目,所以把这个以前写的分享出来。 电脑报修系统 一个带PC和手机两端的后台管理,PC相对权限功能更丰富,手机端后台属于精简版,主要适合维修人员外出录单。客户面板主是订单查询,适合放在公众号,对维护店的客户做集中管理。 1. PC端后台,主要是角色管理,人员权限设置,系统日志查看,系统菜单管理,报修单录入,单子查询操作等。 2. 手机端管理精简了权限管理,适合维修人员直接一对一的录单,超级管理员依然可以指派维修人员任务等。 3.

Mac 编译安装L(N/A)MP以及swoole、redis扩展

寵の児 提交于 2019-11-27 21:06:01
【Ngnix】 1、首先下载Ngnix安装包 wget https://nginx.org/download/nginx-1.14.0.tar.gz · 如果没有安装wget 可以首先执行brew install wget 或者 liunx下 yum install wget 2、接下来我们解压 依次执行 tar -xzvf nginx-1.14.0.tar.gz cd ngnix-1.14.0 ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/bin/nginx --with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl/include' --with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run

swoole报错: Cannot assign requested address [99]

与世无争的帅哥 提交于 2019-11-27 07:50:36
前两天服务器切换了网络之后 发下 一个swoole 的服务起不来了 报错:Cannot assign requested address [99] 先查看了端口占用,发现没有被占用,然后在网上找到了这种解释: 使用 ifconfig 查看网卡绑定的 ip, 只有网卡绑定的 ip 才可以监听 然后ifconfig查看网络信息,果然监听的外网 ip 不在列表里,换了内网 ip 问题解决 来源: oschina 链接: https://my.oschina.net/u/2399303/blog/1934859

php swoole task 踩坑及优化

為{幸葍}努か 提交于 2019-11-27 06:45:43
如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话 task 操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求 task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。 我曾经使用 task 发送服务的链路日志,接收日志的服务出现bug,造成发送日志的 task 阻塞,然后服务 gg 的情况,之后我就对 task 做了一波优化。 思路就是使用 swoole channel ( https://wiki.swoole.com/wiki/page/647.html)和 swoole user process ( https://wiki.swoole.com/wiki/page/390.html)实现一套 task 。 使用 channel 接收数据,然后在 user process 消费数据,假如 channel 满了仅仅会造成 push 数据失败,并不会引发阻塞,因为是链路日志,是允许丢失的,所以这个方案完全没问题。 在swoole user process 消费 channel 的策略的伪代码如下 $sleepTime = 5; $maxSleepTime = 100; while (true) { $task = $chan->pop