一地繁花 發表於 2019-6-12 22:43:00

php开发面试题---php 对swoole的理解

<h1 style="text-align: center">php开发面试题---php 对swoole的理解</h1>
<h2>一、总结</h2>
<h3>一句话总结:</h3>
<h5>以战养学,实例驱动</h5>
<h5>swoole是披着PHP外衣的C程序:其实就是c、java那些语言里面的高阶功能:比如 持久连接、异步通信、websocket、多线程</h5>
<p>&nbsp;</p>
<h3>1、swoole出现的意义是什么?</h3>
<h5>解決php缺失的功能:swoole做为一种网络通信框架,解决php缺失的功能:比如多线程、异步通信、持久连接等</h5>
<p>&nbsp;</p>
<h3>2、swoole的本质是什么?</h3>
<h5>披着PHP外衣的C程序:其实就是c、java那些语言里面的高阶功能</h5>
<h5>php所缺失的功能:swoole所提供的功能正是php所缺失的功能:比如多线程、异步通信、持久连接等</h5>
<h5>异步网络通信引擎:面向生产环境的 PHP 异步网络通信引擎</h5>
<p>&nbsp;</p>
<h3>3、swoole支持哪些功能?</h3>
<h5>其实就是c、java那些语言里面的高阶功能</h5>
<h5>持久连接、异步通信、websocket、多线程</h5>
<p>&nbsp;</p>
<h3>4、php+swoole能做什么?</h3>
<h5>c能做的,php+swoole都能做:比如 游戏服务器、在线聊天系统等</h5>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>二、php 对swoole的理解</h2>
<p>转自或参考:php 对swoole的理解<br>https://blog.csdn.net/qq_42030417/article/details/82997124</p>
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
<div id="content_views" class="htmledit_views">
<p>本文主要记录一下学习swoole的过程、填过的坑以及swoole究竟有多么强大! <br>
首先说一下对swoole的理解:披着PHP外衣的C程序。很多PHPer朋友看到swoole提供的强大功能、外界对其的崇拜便跃跃欲试的安装、调 试其demo、编写新功能,然后兴奋的奔走相告。没过几天当你按照自己的理解继续用swoole时,发现代码并没有按照自己的预期运行,然后开始破口大 骂,什么破东西呀,代码跟demo基本一样,为啥运行不通呢?什么狗屁work、task、共享内存、ipcs、异步,各种问题涌现,然后迅速去查官方文 档,发现文档中竟然对这些并没有提及,只是简单的介绍怎么使用,此时几乎对swoole丧失希望。</p>
<h2 id="1关于phper常用的全局变量global为什么在onrequest函数中不能使用">1:关于phper常用的全局变量(global)为什么在onRequest函数中不能使用。</h2>
<p>因为swoole是多线程编程,global是不能在多个进程间共享的。例如</p>
<pre class="has"><code>global $i = 0;

function onRequest() {

    echo $i++;

} </code></pre>
<p>如果在swoole中写一个上面的程序,并不会每次访问输出一个递增的数字。如果要实现预期的效果,需要使用swoole_table的相关函数。</p>
<h2 id="2什么是异步什么是回调">2:什么是异步、什么是回调</h2>
<p>对于phper来说,对异步、回调的理解估计就是ajax。当看到swoole里面对异步、回调的解释,貌似很简单的样子,就这样在没有任何多线程编辑经验的时候贸然用了swoole,结果被坑的偷偷撸代码好几个通宵来填自己的坑。</p>
<h2 id="3为什么onreceive收到的数据这么大">3:为什么onReceive收到的数据这么大</h2>
<p>客户端发送的多次请求,服务端是可以一次性接收的。并不是客户端发送一次,服务端接收一次</p>
<h2 id="4自制httpserve">4:自制httpserve</h2>
<p>写一个http服务端,然后通过浏览器访问这个自制的服务器,刷新一次浏览器,服务端为什么为接收到两次请求?这个问题估计困饶了好多初次用swoole写httpserver的朋友。因为浏览器会多发一个favicon.ico请求。 <br><strong>原因</strong> <br>
出现这种情况的原因其实很简 单,大部分phper都只会php这一种语言,主要用途就是做web,写业务逻辑。很少去了解服务器程序的开发。有一次一个朋友用swoole写了一个简 单的服务端,一个客户端,跑过来问我为什么都启动了却都收不到数据,我简单看了下代码,所有连接确实都成功了,两端都设置了onReceive回调,代码 没问题,看到最后才发现他的服务端、客户端都设置了接到消息的回调函数,但是两端都没有向对方发消息,两端处于僵持状态。然后swoole官方对于这种常 识问题没有给出说明,只是说如何设置回调、如何发消息,如何这样,如何那样。对于有服务端开发经验的同学来说,肯定不会遇到这种问题,swoole文档也 不需要指明需要这样做,因为这是常识。但对于phper来说,指明这一点是非常重要的,因为如上面所说phper是没有这方面认知的,只有服务端开发经验 的程序员有才会有。 <br><strong>swoole的特色:</strong> <br>
网络通信 框架、异步、多线程。这些特性正是php所不完善的功能(虽然官方提供很多基础函数可以实现这些功能,然后缺少中文文档,很少有人用php来实现这部分功 能),普通的phper也不具备这些特性的基础认知,所以贸然使用swoole难免会遇到一些根本在swoole官方查不到的常识问题。</p>
<h2 id="使用swoole必须要掌握的技能">使用swoole必须要掌握的技能</h2>
<ul>
<li>多线程编程</li>
<li>进程间通信</li>
<li>网络协议TCP/UDP的认知</li>
<li>PHP的各项基本技能</li>




</ul>
<h2 id="个人学习swoole的经历">个人学习swoole的经历</h2>
<p>在很久之前我也是一个只会 php的程序员,后来一次偶然机会需要用httpsqs,用了一段时间后发现有一些个性的需求,于是就开始看源码。这真是不看不知道,一看吓一 跳,httpsqs只是一层简单的包装,内部是一个Tokyo Cabinet数据库,印象中封装的代码也就一百多行。主要思路就是用C语言的libevent做了一个http服务器,接收请求读写tokyo cabinet数据库,当时按照这种思路做出来的程序确实不少。后来我就突发奇想,既然C语言可以用libevent函数,那PHP肯定也可以用 libevent监听网络,接收请求后读写数据库做队列服务。后来经过查php官方文档,PHP确实提供一系统完整的函数来完成这些功能,甚至多线程的全 套函数都有提供,但中文文档太少,网上也很少搜索到成熟的代码。在逼不得已的情况下,补习了linux-C多线程开发的基本原理,进程间通信的常用方法, 也用来做了一些简单的demo。唯一的感觉就是写一个简单的功能,设计起来还真复杂。就在快要放弃的时候,swoole出现了。swoole所提供的功能 正是php所缺失的功能,简直是太棒了。swoole做为一种网络通信框架,只需要简单的几行设置,一个服务器就搭建起来了,以后就是不断的去完善业务代 码。之前在libevent交流群中得知swoole的设计在c\c++中并不是最好的框架设计,但其亮点就是把基本功能用C封装好,业务功能留给世界上 最好的语言PHP来编写。自此便开始了swoole的填坑之旅。</p>
<h2 id="总结">总结</h2>
<p>swoole并不是一个简单的PHP框架,正如swoole官方首页的第一句话“重新定义PHP”,千万不要用旧有php的思想来写swoole代码!swoole重新激活了PHP,php成就了swoole! <br>
转自http://developer.51cto.com/art/201509/491530.htm</p>



          </div>




                  </div>
<div>&nbsp;</div>

</div>
<div id="MySignature" role="contentinfo">
    <div id="fry_added_part">
    <div class="fry_website">
      <div class="fry_website" style="color:#3c8dbc;padding: 10px 0;display:none;">
            我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站:
            【读书编程笔记】fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
      </div>
      <div class="copyright" style="color: red;padding-bottom: 10px;">
            版权申明:欢迎转载,但请注明出处
            <div style="font-size: 12px">一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。</div>
      </div>
      <div id="fry_know_friends" style="color: red;padding-bottom: 10px;font-size: 22px;">
            <div style="display:none;"></div>
            <div style="display:none;">在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。</div>
            <div style="display:none;">2025-04-30:宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308</div>
      </div>
      <div class="copyright" style="color: green;padding-bottom: 10px;">
            录播课资料github地址:https://github.com/fry404006308/fry_course_materials
      </div>
      <div style="display:none;"></div>
    </div>
    <div class="fry_tech_group" style="color: mediumpurple;">
      <div>
            AI交流资料群:753014672
      </div>
    </div>
    <div class="fry_recommend">
      <h2>作者相关推荐</h2>
      <div id="fry_recommend" style="padding-bottom: 40px">
      </div>
    </div>
    <style>
      #fry_added_part .inspiration_content{
            //max-height: 120px;
            overflow: auto;
            margin: 20px 0;
      }
      #fry_added_part .fry_inspiration .simple a{
            margin-right: 25px;
      }
    </style>
    <div style="display:none;" class="fry_inspiration">
      <div style="color: red;font-size: 20px;text-align: center;" class="title">
            感悟总结
      </div>
      <!--分为详细部分和简略部分-->
      <!--详细部分-->
      <div class="detail">
            <div class="url_set">
                <div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/13498246.html"></div>
                <!--<div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/14379366.html"></div>-->
                <!--<div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/14154624.html"></div>-->
            </div>
            <div class="content_set"></div>
      </div>
      <!--简略部分-->
      <div style="display: none;" class="simple">
            <div style="color: #FF9966;margin-bottom: 10px;">其它重要感悟总结</div>
            <div>
                感悟总结200813
                最近心境200830
                最近心境201019
                201218-210205
            </div>
      </div>
    </div>
</div><br><br>
来源:https://www.cnblogs.com/Renyi-Fan/p/11005661.html
頁: [1]
查看完整版本: php开发面试题---php 对swoole的理解