
这是关于php进阶到架构之 swoole 系列学习课程:第三节:mysql连接池
学习目标 :
了解什么是mysql连接池,以及mysql使用场景。能在实际工作使用连接池(数据库连接池,redis连接池等等)解决高并发带来的问题。
场景 :
每秒同时1000个并发,但mysql数据库同时只支持400个连接,这样mysql就会宕机
解决方案 :
使用连接池,这个连接池建立了300个与mysql的连接对象,这1000个并发有序地共享连接池里的300个连接。
连接池的使用不但解决了mysql在高并发情况下宕机问题,还额外提高了性能。因为和mysql建立连接,消耗较大。使用连接池只需要连接一次mysql。
永不断开,需要程序常驻内存,这就需要借助swoole实现。
数据库连接池是程序启动时,建立足够的数据库连接,并将这些连接组成一个连接。由程序动态的对连接池中的连接进行申请,使用,释放和回补。
服务器端由Nginx/Apache+PHP提供HTTP服务,比如监听80端口.浏览器访问 http://im.swoole.com/main.html 获取Nginx/Apache+PHP服务产生的数据.
PHP实现的WebSocket服务(CLI程序)单独监听一个端口,比如9503:
main.html页面里用JavaScript访问 ws://im.swoole.com:9503 获取WebSocket服务产生的数据.
具体可以试试部署一个用Swoole实现的WebSocket网页聊天工具PHPWebIM:
https://github.com/matyhtf/php-webim
Nginx 支持 WebSocket 反向代理:
http://nginx.com/blog/websocket-nginx/
http://nginx.org/en/docs/http/websocket.html
upstream wsbackend {
server 127.0.0.1:9503
}
# 访问 ws://im.swoole.com/chat/ 下的内容将被反向代理到wsbackend
location /chat/ {
proxy_pass http://wsbackend
proxy_http_version 1.1
proxy_set_header Upgrade $http_upgrade
proxy_set_header Connection "upgrade"
}
linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件(脚本程序简单的说就是把要运行的程序写 到一个 文件里让系统能够按顺序执行,类似windows下的autorun.dat文件),另外在/etc这个文件夹里还有诸如名为rc1.d, rc2.d一直到rc6.d的文件夹,这些都是linux不同的runlevel,我们一般进入的X windows多用户的运行级别是第5级,也就是rc5.d,在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是,在每个rc (1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接(类似windows中的快捷方式),也就是说,在 /etc/init.d文件夹下是全部的服务程序,而每个rc(1-6).d只链接它自己启动需要的相应的服务程序!要 启动scim (某一程序),我们首先要知道scim程序在哪里,用locate命令可以找到,scim在/usr/bin/scim这里,其中usr表 示是 属于用户的,bin在linux里表示可以执行的程序。这样,我就可以编写一个脚本程序,把它放到/etc/init.d里,然后在rc5.d里做一个相 应的软链接就可以了。
这个脚本其实很简单,就两行:
#!/bin/bash
/usr/bin/scim
第一行是声明用什么终端运行这个脚本,第二行就是要运行的命令。
还 需要注意的一点是,在rc5.d里,每个链接的名字都是以S或者K开头的,S开头的表示是系统启动是要随机启动的,K开头的是不随机启动的。这 样,你就可以知道,如果我要哪个服务随机启动,就把它名字第一个字母K改成S就可以了,当然,把S改成K后,这个服务就不能随机启动了。因此,我这个链接 还要起名为SXXX,这样系统才能让它随机启动。
在RH下,rc.local是默认启动的最后一个脚本文件,所以,
如果你想要随机启动,还有一种方法就是在rc.local的尾部加入/usr/bin/scim,这样就可以了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)