SMProxy协程调试实现MySQL连接池

作者: 温新

分类: 【高性能PHP】

阅读: 3545

时间: 2021-04-25 16:35:15

序言

LaravelS扩展不支持数据库连接池,只能在实现数据库长连接。对于PHP应用来说,数据库连接池在提升性能方面有显著功效。Swoole提供了异步任务或协程来实现数据库连接池。如何更好的实现数据库连接池?SMProxy扩展就是一个很好的选择,它是一个基于Swoole开发的MySQL数据库连接池。

什么是SMProxy

SMProxy是一个基于MySQL协议,Swoole开发的MySQL数据库连接池。

SMProxy原理

与传统PHP应用中数据库短连接不同,SMProxy是将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并不会建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。

同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。超出最大连接数会采用协程挂起,等到有连接关闭再恢复协程继续操作。

SMProxy特性

  • 支持读写分离;
  • 支持数据库连接池,能够有效解决PHP带来的数据库连接瓶颈;
  • 支持SQL92标准;
  • 采用协程调试;
  • 支持多个数据库连接,多个数据库,多个用户,灵活搭配;
  • 遵守MySQL原生协议,跨语言,跨平台的通用中间件代理;
  • 支持MySQL事务;
  • 完美支持MySQL5.5-8.0
  • 兼容各大框架,无缝提升性能

设计初衷

PHP 没有连接池,所以高并发时数据库会出现连接打满的情况,Mycat 等数据库中间件会出现部分 SQL 无法使用,例如不支持批量添加等,而且过于臃肿。 所以就自己编写了这个仅支持连接池和读写分离的轻量级中间件,使用 Swoole 协程调度 HandshakeV10 协议转发使程序更加稳定,不用像 Mycat 一样解析所有 SQL 包体,增加复杂度。

以上信息来源自SMProxy,下面开始实践。

第一步:安装SMProxy

我这里使用的CentOS7.7。安装前请先安装git、composer

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(51, 0, 170)">cd</span> /usr/local/src</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(51, 0, 170)">git</span> clone https://github.com/louislivi/SMProxy.git</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(51, 0, 170)">cd</span> SMProxy</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)"># 如果你想贡献你的代码,请不要使用 --no-dev 参数</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">composer install <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--no-dev</span> </span>

注意了,我这里使用的是PHP8.0.1,因此composer安装报了两个如下错误:

1)smproxy Root composer.json requires php ^7.0 but your php version (8.0.1) does not satisfy ......

2)friendsofphp/php-cs-fixer v2.15.0

解决方法

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(51, 0, 170)">cd</span> SMProxy</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)"># 编辑composer.json,修改内容如下</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"require"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"php"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"^7.0|^8.0"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">},</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"require-dev"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"friendsofphp/php-cs-fixer"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"v2.18.6"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

修改完成后,安装执行composer安装

第二步:不使用连接池测试查询

安装完成后,先不用着急启动。来测试一下php查询数据所花费的时间。

文件:demo.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><?</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$start</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">microtime</span>(<span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$conn</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">new</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">mysqli</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'127.0.0.1'</span>, <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'root'</span>, <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'123456'</span>, <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'sakila'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">if</span> (<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$conn</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">connect_error</span>) {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(119, 0, 136)">die</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'数据库连接失败: '</span> . <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$conn</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">connect_error</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$sql</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"select * from actor"</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$result</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$conn</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">query</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$sql</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$conn</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">close</span>();</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$end</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">microtime</span>(<span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">echo</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$end</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$start</span>;</span>

运行

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">demo</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 输出结果</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0.0026519298553467</span></span>

第三步:配置

安装成功后,配置conf目录下的database.jsonserver.json。前者用于配置MySQL数据库信息;后者用于配置SMProxy服务器信息。

database.json配置

<span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"database"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"account"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"root"</span>: { <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 自定义用户名</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"user"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"root"</span>, <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,数据库账户</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"password"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"123456"</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,数据库密码</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"serverInfo"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"server1"</span>: { <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 自定义数据库连接信息</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"write"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"host"</span>: [<span style="box-sizing: border-box;color: rgb(170, 17, 17)">"127.0.0.1"</span>],<span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,写库地址</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"port"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">3306</span>, <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,写库端口</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"timeout"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">2</span>, <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,写库连接超时时间(秒)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"account"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"root"</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 必选,用户自定义名</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"read"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"host"</span>: [<span style="box-sizing: border-box;color: rgb(170, 17, 17)">"127.0.0.1"</span>],<span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 可选,写库地址</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"port"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">3306</span>,<span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 可选,写库端口</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"timeout"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">2</span>,<span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 可选,读库连接超时时间(秒)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"account"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"root"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"startConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*10"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxSpareConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*10"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxSpareExp"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">3600</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*20"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"databases"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"sakila"</span>: { <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 数据库名称</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">         <span style="box-sizing: border-box;color: rgb(170, 85, 0)">//必选,自定义数据库连接信息 与serverInfo中的自定义数据库连接信息相对应</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"serverInfo"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"server1"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"startConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*2"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxSpareConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*2"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxSpareExp"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">3600</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"maxConns"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()*2"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"charset"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"utf8mb4"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

server.json配置

<span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"server"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"user"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"root"</span>, <span style="box-sizing: border-box;color: rgb(170, 85, 0)">//必选,SMProxy服务用户</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"password"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"123456"</span>,<span style="box-sizing: border-box;color: rgb(170, 85, 0)">//必选,SMProxy服务密码</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"charset"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"utf8mb4"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"host"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"0.0.0.0"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"port"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"3366"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"mode"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"SWOOLE_PROCESS"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"sock_type"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"SWOOLE_SOCK_TCP"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"logs"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"open"</span>:<span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"config"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"system"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"log_path"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"ROOT/logs"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"log_file"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"system.log"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"format"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"Y/m/d"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"mysql"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"log_path"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"ROOT/logs"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"log_file"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"mysql.log"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">          <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"format"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"Y/m/d"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"swoole"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"worker_num"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"swoole_cpu_num()"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"max_coro_num"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">6000</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"open_tcp_nodelay"</span>: <span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"daemonize"</span>: <span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"heartbeat_check_interval"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">60</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"heartbeat_idle_time"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">600</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"reload_async"</span>: <span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"log_file"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"ROOT/logs/swoole.log"</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"pid_file"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"ROOT/logs/pid/server.pid"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"swoole_client_setting"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"package_max_length"</span>: <span style="box-sizing: border-box;color: rgb(17, 102, 68)">16777215</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    },</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"swoole_client_sock_setting"</span>: {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">      <span class="cm-string cm-property" style="box-sizing: border-box;color: rgb(0, 0, 0)">"sock_type"</span>: <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"SWOOLE_SOCK_TCP"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

第四步:启动SMProxy

<span style="box-sizing: border-box;padding-right: 0.1px">.<span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">bin</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">start</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>      <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$$</span>                                        </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$__</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$</span>    <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$__</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>                                       </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span>   <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>   <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>   <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$$</span><span style="box-sizing: border-box;color: rgb(170, 85, 0)">//$$__  $$ /$$__  $$|  $$ /$$/| $$  | $$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\____</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$____</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>     <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>      <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>     <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>      <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">\</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\______</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>     <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/|</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>     <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>       <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\______</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\__</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\____</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">                                                               <span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span>  <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">                                                              <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span>  <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$$$$$$</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">                                                               <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\______</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span>                                                       </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">version</span>: <span style="box-sizing: border-box;color: rgb(0, 0, 0)">v1</span>.<span style="box-sizing: border-box;color: rgb(17, 102, 68)">3.1</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">@34ff042</span></span>

注意,需要给予 bin/SMProxy 执行权限。

命令参考

<span style="box-sizing: border-box;padding-right: 0.1px"> SMProxy [ <span style="box-sizing: border-box;color: rgb(51, 0, 170)">start</span> | <span style="box-sizing: border-box;color: rgb(51, 0, 170)">stop</span> | <span style="box-sizing: border-box;color: rgb(51, 0, 170)">restart</span> | status | reload ] [ <span style="box-sizing: border-box;color: rgb(0, 0, 204)">-c</span> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--config</span> <configuration_path> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--console</span> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">-f</span> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--force</span> ]</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  SMProxy <span style="box-sizing: border-box;color: rgb(0, 0, 204)">-h</span> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--help</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  SMProxy <span style="box-sizing: border-box;color: rgb(0, 0, 204)">-v</span> | <span style="box-sizing: border-box;color: rgb(0, 0, 204)">--version</span></span>

查看进程

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ps</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ef</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">|</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">grep</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">root</span>       <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1499</span>      <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1</span>  <span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">22</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">58</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">?</span>        <span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">master</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">process</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">root</span>       <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1500</span>   <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1499</span>  <span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">22</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">58</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">?</span>        <span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">manager</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">process</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">root</span>       <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1503</span>   <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1500</span>  <span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">22</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">58</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">?</span>        <span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">worker</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span>  <span style="box-sizing: border-box;color: rgb(0, 0, 0)">process</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">root</span>       <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1518</span>   <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1169</span>  <span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">22</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">58</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">pts</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">/</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0</span>    <span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">grep</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">--</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">color</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">auto</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SMProxy</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span>

第五步:配置Laravel8

编辑文件:.env.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_CONNECTION</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(51, 0, 170)">mysql</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_HOST</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0.0</span>.<span style="box-sizing: border-box;color: rgb(17, 102, 68)">0.0</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_PORT</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">3306</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_DATABASE</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">sakila</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_USERNAME</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">root</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB_PASSWORD</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">123456</span></span>

第六步:Laravel8连接池查询测试

文件:routes/web.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Support\Facades\DB</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'a'</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> () {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$start</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">microtime</span>(<span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$acs</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">DB</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">table</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'actor'</span>)<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>();</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$end</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">microtime</span>(<span style="box-sizing: border-box;color: rgb(34, 17, 153)">true</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$end</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$start</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>

浏览器中访问该路由,即可看到输出时间为0.00064992904663086。现在来对比一下使用连接池与不使用连接池的差距:

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 未使用连接池查询所花费的时间</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0.0026519298553467</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 使用连接池查询所花费的时间</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(17, 102, 68)">0.00064992904663086</span></span>

可以看到,时间确实缩短了,SMProxy提高数据查询性能。

关于数据库的时间,我这里使用的MySQL官方提供的测试数据sakila-db,该数据可以到MySQL官方下载。

请登录后再评论