当前位置: 首页 > news >正文

网站开发能用react吗网站开发实施经费预算

网站开发能用react吗,网站开发实施经费预算,深圳搜索seo优化排名,网络建站东北背景#xff1a;swoole的出现#xff0c;包括PHP出现前#xff0c;在新浪企业邮箱就有基于Sun Solaris 系统上面用c写Mysql的长连接#xff0c;那时候的长连接是基于RPC实现#xff0c;对mysql那一端形成一个远程过程的调用#xff0c;通过XDR数据结构进行解析mysql传来的…背景swoole的出现包括PHP出现前在新浪企业邮箱就有基于Sun Solaris 系统上面用c写Mysql的长连接那时候的长连接是基于RPC实现对mysql那一端形成一个远程过程的调用通过XDR数据结构进行解析mysql传来的数据项(RPC也为sun最新提出并后来在linux上默认支持)也就是说像用户登录验证这一块用Mysql的长连接来实现提高其效率运行相当稳定后面这个系统迁移到了FreeBSD后出现了mysql长连接的服务经常出现假死也就是说进程还在但是已经连接不上mysql了重新启动这个RPC服务又好了原因未知当时我对c不了解(现在也不太了解只听说要看是否形成coredump啥的)当年我还写过一个判断死了就杀死重启动判断的程序也老半天回不来于是我又改成了一个多进程如果超时没有回来就干掉那个进程重启Rpc服务再后来这套C的cgi被替换成了php再后来基于FreeBSD的系统迁移到了Linux也就是现在一直在linux上linux也就强大了起来回想起来当年一个登录服务如此极致现在都变成了直接查询mysql了这个长连接技术有还有用吗我只能说对有上千台上万台的服务器可能有用能节省一定的机器成本罢。但是追求技术永无止境需要有这样的一些东西来繁荣我们这个PHP的市场长连接这个话题不再是Java做成了连接池像c也能做成连接池像腾讯广平就有c团队还有写cgi实现长连接Mysql服务据说前二年吧更多关注了H5像实时技术比如Tail技术在web上的实现有转向nodejs的趋势而此时的PHP拿不出这样的技术是很危险的有了swoole起到填补作用我更多的是觉得官方应该重视这个技术而不是形成一个扩展像H5的来到像websocket的进入这些东西对于Node来讲从前端向后端的统一而PHp呢没有谁来解决那么从用户角度来讲开发者用户的流失或迁移对PHP本身也是一个损失但我还是说PHP是最好的语言没有之一期望其能伴随潮流与时俱进。PHP的数据库连接池一直以来都是一个难题很多从PHP语言转向Java的项目大多数原因都是因为Java有更好的连接池实现。PHP的MySQL扩展提供了长连接的API但在PHP机器数量较多规模较大的情况下mysql_pconnect非但不能节约MySQL资源反而会加剧数据库的负荷。假设有100台PHP的应用服务器每个机器需要启动100个apache或fpm工作进程那每个进程都会产生一个长连接到MySQL。这一共会产生1万个My SQL连接。大家都知道MySQL是每个连接会占用1个线程。那MYSQL就需要创建1万个线程这样大量的系统资源被浪费在线程间上下文切换上。而你的业务代码中并不是所有地方都在做数据库操作所以这个就是浪费的。连接池就不同了100个worker进程公用10个数据库连接即可当操作完数据库后立即释放资源给其他worker进程。这样就算有100台PHP的服务器那也只会创建1000个MySQL的连接完全可以接受的。以前确实没有好的办法来解决此问题的现在有了swoole扩展利用swoole提供的task功能可以很方便做出一个连接池来。代码如下$serv new swoole_server(127.0.0.1, 9508);$serv-set(array(worker_num 100,task_worker_num 10, //MySQL连接的数量));function my_onReceive($serv, $fd, $from_id, $data){//taskwait就是投递一条任务这里直接传递SQL语句了//然后阻塞等待SQL完成$result $serv-taskwait(show tables);if ($result ! false) {list($status, $db_res) explode(:, $result, 2);if ($status OK) {//数据库操作成功了执行业务逻辑代码这里就自动释放掉MySQL连接的占用$serv-send($fd, var_export(unserialize($db_res), true) . \n);} else {$serv-send($fd, $db_res);}return;} else {$serv-send($fd, Error. Task timeout\n);}}function my_onTask($serv, $task_id, $from_id, $sql){static $link null;if ($link null) {$link mysqli_connect(127.0.0.1, root, root, test);if (!$link) {$link null;$serv-finish(ER: . mysqli_error($link));return;}}$result $link-query($sql);if (!$result) {$serv-finish(ER: . mysqli_error($link));return;}$data $result-fetch_all(MYSQLI_ASSOC);$serv-finish(OK: . serialize($data));}function my_onFinish($serv, $data){echo AsyncTask Finish:Connect.PID . posix_getpid() . PHP_EOL;}$serv-on(Receive, my_onReceive);$serv-on(Task, my_onTask);$serv-on(Finish, my_onFinish);$serv-start();看完上面的看完了觉得真的很厉害。毕竟现在来说可能是还没有真正在PHP使用数据库连接池的大应用。今天终于准备实验实验。在开始之前还是说一下测试环境吧OS CentOS 6.4 x86php 5.3.17MySQL 5.5.28Swoole 1.6.8。首先我们当然要把代码写好。下面是服务端代码很多是参考了上面文章里面的当然也有自己的内容。$serv swoole_server_create(127.0.0.1, 3305, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);//端口3305swoole_server_set($serv, array(worker_num 2,      //worker线程的数量task_worker_num 1, //MySQL连接的数量));//作为小型测试参数调得比较小//这里有一个守护进程化的参数由于是实验没有加入function my_onReceive($serv, $fd, $from_id, $data){//执行查询$result $serv-taskwait($data);if ($result ! false) {swoole_server_send($serv, $fd, $result);return;} else {swoole_server_send($serv, $fd, Error. Task timeout\n);}}function my_onTask($serv, $task_id, $from_id, $sql){static $link NULL;if ($link NULL) {$link mysqli_connect(localhost, user, pw, db);//localhostUNIX Socket , IP地址TCP/IP}$result $link-query($sql);if ($result false) {swoole_server_finish($serv, b:0;);//语句运行失败这是serialize后的false下同理return;}if ($result true){swoole_server_finish($serv, b:1;);//写入操作成功return;}$data $result-fetch_all(MYSQLI_ASSOC);swoole_server_finish($serv, serialize($data));}function my_onFinish($serv, $data){//这次实验就没有写东西了//但是必须有这个函数定义//其实可以写日志什么的吧}swoole_server_handler($serv, onReceive, my_onReceive);swoole_server_handler($serv, onTask, my_onTask);swoole_server_handler($serv, onFinish, my_onFinish);//上面是设置回调函数swoole_server_start($serv);swoole_event_wait();//实验环境是PHP5.3所以需要这个函数进行事件轮询5.4就不需要了如果把上面的连接池代码和Rango的相比较会发现我的对于错误的部分处理很少。其实这个时候用CLI运行这个连接池然后使用Telnet已经就可以直接测试效果了。但是不管怎么说这个东西还是要应用在PHP上面的我简单地写一下PHP方面的代码。$linknew swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);//TCP方式、同步$link-connect(127.0.0.1,3305);//连接$link-send(SELECT * FROM table);//执行查询$resunserialize($link-recv());if(!res){echo Failed!;}else{print_r($res);}$link-close();//上面的是最简单的测试下面可以简单地改写成函数function dbcp_query($sql){$linknew swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);//TCP方式、同步$link-connect(127.0.0.1,3305);//连接$link-send($sql);//执行查询return unserialize($link-recv());//swoole_client类析构时会自动关闭连接}现在可以运行了本次实验是成功的。但是如果使用dbcp_query()这个函数每次调用都要发起一次TCP连接执行的语句多了肯定出问题。这个时候我们就可以把它封装成一个类了单纯实现这个会比较的简单但是打出来要点时间这里就不写了。最后今天做的是数据库连接池的实现。从上面的代码我们可以看见程序与连接池之间的数据交换是使用php序列进行的。这里会有两次的serialize、unserialize绝对也是一个开销。Rango的文章里面有说到“MySQL是每个连接会占用1个线程……大量的系统资源被浪费在线程间上下文切换上……不是所有地方都在做数据库操作所以这个就是浪费的。”再看看他那篇文章的假设“假设有100台PHP的应用服务器每个机器需要启动100个apache或fpm工作进程。”这肯定不是一个小项目确实就适合用连接池了。写的东西是用来练手或者解闷儿的常规方法已经可以了。不要忘了一点程序与连接池的交互我们应该还是用Swoole实现的Swoole可是一个TCP/UDP扩展。而Swoole只能运行在Linux平台上面但是Linux平台上的MySQL是可以用UNIX Socket通讯的。P.S.找个时间给epdb改写一个支持数据库连接池的版本。来自http://rango.swoole.com/archives/265http://bokjan.com/prog/php-db-conn-pool-with-swoole.html
http://www.pierceye.com/news/110883/

相关文章:

  • 上海网站建设公司排名王也诸葛青cp
  • 常用的设计网站有哪些wordpress如何汉化主题
  • 深圳全网营销型网站免费做调查的网站有哪些
  • 设计素材网站知乎济南seo网站推广
  • 网站建设类岗位杭州国家电网 两学一做 网站
  • html静态网站开发自我介绍网站手机客户端开发教程
  • 营销型网站是什么样的桂林北站有核酸检测点吗
  • 网站未备案被阻断怎么做it培训机构哪个好一点
  • 重庆建设注册执业中心网站网络营销百度百科
  • app网站怎么下载个人备案做视频网站
  • 西宁建一个网站公司广东网站备案
  • 网站数据比较北京网站优化推广公司
  • 想做网站的客户在哪找美间在线设计平台
  • 网站设计规划的目的和要求营销外贸网站建设案例
  • 网站营销力一级a做爰片2017免费网站
  • 昌图网站网页界面设计的要求
  • 做一个网站赚钱什么 门户网站
  • 中国建设银行购物网站帝国织梦wordpress
  • 瑞安网站网站建设松原公司做网站的流程
  • 做网站按页面收费视频解析网站如何做搜索
  • 太原网站的公司赣州安全教育平台
  • 淮北建投网站网站推广与维护有什么不同
  • 深圳网站备案注销平果县免费网站哪家好
  • 如何区分网站开发语言做网站多少钱一般
  • 定制专业app开发seo数据统计分析工具有哪些
  • 某服装公司网站建设论文网站建设seo虾哥网络
  • 网站建设销售员工作内容网站访问量过大
  • 企业网站加快企业信息化建设设计网站名称
  • 做网站的技术要求高吗农业推广专业
  • 在百度做个卷闸门网站怎么做成都高端网站