[swoole]swoole学习笔记

1、swoole安装方式,手动安装,自动安装

  手动安装:https://github.com/swoole/swoole-src/releaseshttp://pecl.php.net/package/swoolehttp://git.oschina.net/swoole/swoole,随便从那个下载地址中下载最新版的swoole,在Linux环境下可以  tar -zxvf 解压后cd进解压的目录 phpize , ./configure, make && make install 进行安装,在 ./configure --enable-coroutine --enable-openssl --enable-http2 --enable-async-redis -- enable-sockets --enable-mysqlnd 这些配置参数中选择允许配置(需要有对应安装,否则将会保错)。

  自动安装: 使用PHP提供的pecl 安装,安装命令:pecl install swoole

2、swoole运行注意事项

  swoole是运行在cli命令行环境的,从层次上来说是跟web服务器通层次的,所以请勿通过web服务器来执行swoole。

  swoole启动后除了配置的worker进程数跟task进程数之外,还有一个master主进程跟一个manager管理进程。

  swoole启动后代码将会加载到内存中运行,所以修改swoole代码后需要重启swoole后才会生效,另外swoole是有自己的变量的内存释放只会自动释放非全局变量,global,static ,以及超全局变量(eg:_GET等)均不会自动释放,需要手动释放,所以在swoole中必须用到全局变量,就必须手动清理内存,以免发生内存泄漏等异常情况。另外再swoole中请勿使用exit(),die()方法,这类方法将会结束掉相关进程,建议使用try-cacth来捕获异常信息,并且请勿使用sleep方法,因为sleep对当前进程进行睡眠后,在此期间将不会接受其他请求,另外死循环也会让进程无法接收请求,导致整个服务无响应。

  将swoole当成服务运行的时候需要将swoole配置为守护进程来运行,配置参数为:daemonize => 1(此参数配置针对init模式),如果使用systemd来管理swoole的话,将不需要配置该参数。

  swoole 通过异步非阻塞方式运行,实现高并发响应

  可以通过swoole调用远程服务器上的程序,页面调用swoole客户端,给远程服务器上的swoole服务端发送请求,通过远程服务器上swoole服务调起需要请求的对应的执行代码,然后swoole服务将得到的结果返回给swoole客户端,页面使用swoole客户端拿到远程服务端返回的数据显示在页面,从而达到调用远程机器上的服务的目的(RPC服务)。

  创建swoole服务端,当根据需要使用的协议new了服务端对象后,设置相关参数,以及相关回调方法后,请不要忘记了执行start()动作开启服务,创建客户端的时候执行connect()动作,连接到swoole服务端。

3、创建swoole服务端

  $serv = new swoole_server('0.0.0.0',9502); //创建server对象。简体全部访问地址的9502端口,默认创建的是TCP服务

  $serv -> set(array(''));//添加服务的配置, 此处是添加tcp心跳

  $serv -> on('connect', function($serv, $fd) {  //监听连接进入事件,当有客户连接时调用

    echo 'Client : Connect '.PHP_EOL;

  );

  $serv -> on('receive', function($serv, $fd, $reactor_id, $data) {  //监听数据接收事件,当收到客户消息时调用

    $serv->send($fd, 'Server: '.$data); //给fd用户发送回复消息

  );

  $serv -> on('close', function($serv, $fd) {  //监听连接关闭事件,当有客户关闭连接时调用

    echo 'Client : Close '.PHP_EOL;

  );

  $serv -> start(); //启动服务

  注意创建其他协议类型的服务端,步骤类似,方法存在差异,如web服务,只需new swoole_http_server('监听ip',监听端口),然后 on('request',function($request,$response){输出页面响应})。如websocket服务,只需new swoole_websocket_server('监听ip',监听端口),然后监听的回调函数分别是onopen,onmessage,跟onclose,然后发送给用户消息的方法由send变成push。另外如果运行时间较长的动作可以使用异步任务ontask,执行完后将会调用onfinish

4、创建swoole 的TCP客户端

   创建客户端分,同步TCP客户端跟异步TCP客户端 new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC); 第二个参数不填默认就是同步客户端,SWOOLE_SOCK_ASYNC表示异步客户端

  同步客户端:直接connect('服务端地址',‘服务端端口’,'链接超时时间(秒)'),从服务端接收数据recv() ,向服务端发送数据send() ,然后关闭close()

  异步客户端:连接监听onconnect,接收数据监听onreceive,错误监听onerror,关闭监听onclose,然后就是执行connect('服务ip','服务端口','超时时间')方法

5、创建h5访问

  使用h5页面访问swoole的话使用h5自带的websoket相关方法,与websoket服务类型的swoole端通信

  var Socket = new WebSocket(url, [protocol] ); //url使用ws:// wss://开头,wss表示通信加密的传输数据   格式:ws://192.168.1.1:9502,wss://192.168.1.1.9502

  回调监听  

  Socket.onopen(连接建立时触发)   Socket.onmessage(客户端接收服务端数据时触发)

  Socket.onerror(通信发生错误时触发)  Socket.onclose(连接关闭时触发)

  websoket方法

  Socket.send()【使用连接像服务端发送数据】   Socket.close()【关闭连接】

  

posted @ 2018-10-31 10:04  hhao321  阅读(660)  评论(0)    收藏  举报