常常在群里听到一些朋友问:TP 的项目怎么迁移到 mixphp 来处理高并发,我一般都是回复须要重写,但是一个开发好久的 TP 项目,代码量巨大,又怎么可能会花大量时间成原本重写呢?php
那么为什么咱们不尝试换一种思路来解决问题?git
在现有框架不变的状况下,引入 mixphp 来处理高并发的部分。
二八效应在任何领域都存在,若是你作过多个项目,你就会发现:github
一个项目中高并发的接口或页面,一般只占到项目的 20% 如下。
一些常见的高并发场景的问题:web
一些常见的大量计算场景的问题:redis
在 TP 的接口中使用消息队列,把要入库的数据写入 redis 的 list 类型中。数据库
$redis->lpush($key, $data);
而后在 mixphp 中使用多进程服务来消费这个队列:缓存
DEMO (V1):https://github.com/mix-php/mi...安全
mixphp 的多进程服务有不少传统框架所不具有的特色:服务器
该种场景瓶颈已经不在数据库,由于 HTTP 接口是请求响应式,如此频繁的请求,不断的创建与关闭链接消耗了太多的服务器性能,这时需使用长链接协议 WebSocket 来优化。websocket
使用 mixphp 的 WebSocketd 封装,能很快就搭建一个数据推送系统,解决 API 轮询的性能瓶颈:
DEMO (V1):https://github.com/mix-php/mi...
若是从一个数据表中取出大量数据,一个进程计算又太慢了,若是分多个进程分页去查询后,再分开计算,速度是快了,可是若是查询中数据有变化,由于每一个进程分别会查一次数据库,就会致使有的数据遗漏没有计算到、有的又被屡次计算,致使计算结果错误。
这时使用 mixphp 的多进程服务就不会有这个问题,mixphp 的多进程服务在进程内部作了生产者消费者模型,只需使用一个进程去数据表取出数据,而后一行一行发送给消费者进程去计算,这样就高效安全的完成了一次大量计算。
GitHub: https://github.com/mixstart/m...
官网:http://www.mixphp.cn/