PHP CLI模式下PCNTL扩展实现多进程服务的例子

 更新时间:2016年11月25日 15:27  点击:2218
我们一起来看一个PHP CLI模式下PCNTL扩展实现多进程服务的例子,有面要了解这个问题的朋友可以和小编一起来看看。


PHP可通过PCNTL扩展实现进程控制,如进程创建,信号处理,进程中断判断等。但只能在CLI模式下操作。
PCNTL的信号机制是基于 ticks 机制实现的。因此在使用信号相关函数时需要在前面添加declare(ticks = n) 语法结构。
pcntl_alarm ( int $seconds )指定秒数后向进程发送一个 SIGALRM 信号
pcntl_signal ( int $signo , callback $handler [, bool $restart_syscalls ])给指定信号$signo设置回调函数
declare(ticks = 1);
 
function signal_handler($signal) {
    print "Caught SIGALRM\n";
    pcntl_alarm(3);
}
 
pcntl_signal(SIGALRM, "signal_handler", true);
pcntl_alarm(3);
 
for(;;) {
}

pcntl_exec ( string $path [, array $args [, array $envs ]] )执行指定命令,执行完即结束,后面将不会执行
$dir = '/root/';
$cmd = 'ls';
$option = '-l';
$pathtobin = '/bin/ls';
 
$arg = array($cmd, $option, $dir);
pcntl_exec($pathtobin, $arg);
 
echo 'will not exec here';

pcntl_fork ( void )为当前进程fork子进程
此时,父进程执行过程中,得到的fork返回值为子进程号(>0),失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误;
父进程的阻塞同时会阻塞子进程。但是父进程的结束不影响子进程的运行;
子进程会从执行pcntl_fork()的那条语句开始执行(包括此函数),但是此时它返回的是零(代表这是一个子进程)。在子进程的代码块中最好有exit语句,即执行完子进程后立即就结束。
int pcntl_wait ( int &$status [, int $options = 0 ] ) 等待或返回fork的子进程状态
说明子进程调用结束后,并没有完全销毁,而是变成了僵尸进程,不占内存,仅存在进程列表。此时需要调用父进程调用wait来等待子进程结束。如果父进程在子进程前退出了,那么init进程将会对僵尸进程进行管理,它还是可以被清除的。第二个参数可设置阻塞方式:
1. WUNTRACED 阻塞方式调用的,函数返回值为子进程的pid,如果没有子进程返回值为-1;
2. WNOHANG 非阻塞方式调用,函数还可以在有子进程在运行但没有结束的子进程时返回0。
$pid  =  pcntl_fork ();
//父进程和子进程都会执行下面代码
if ( $pid  == -1 ) {
    //错误处理:创建子进程失败时返回-1.
    die( 'could not fork' );
} else if ( $pid ) {
    //父进程会得到子进程号,所以这里是父进程执行的逻辑
    pcntl_wait ($status, WUNTRACED);  //等待子进程中断,防止子进程成为僵尸进程。
    echo "ok".PHP_EOL;
} else if ($pid == 0){
    //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
    echo "子进程运行" . getmypid() .PHP_EOL;
    sleep(5);
    exit;
}
 
echo "父进程运行" . getmypid() .PHP_EOL;

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。本文我们将介绍在Linux下安装ffmpeg及ffmpeg的PHP扩展的详情步骤,还有在64位的win7下ffmpeg的php扩展安装。

1.什么是FFmpeg?现在我们来看看百度百科的介绍。
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

2.编译所需源码包

yasm:http://yasm.tortall.net/Download.html(汇编器,新版本的ffmpeg增加了汇编代码)

lame:http://lame.sourceforge.net/download.php(Mp3音频解码)

OpenCore AMR:http://sourceforge.net/projects/opencore-amr

AmrNB:http://www.penguin.cz/~utx/amr

AmrWB:http://www.penguin.cz/~utx/amr

FFMpeg:http://ffmpeg.org/download.html。


分别解压缩并编译上述源码包

#tar xzvf *.tar.gz

#tar xjvf *.tar.bz2


解压后直接使用

#./configure

#make

#make install

命令进行编译安装。

编译FFMpef的时候稍微特殊一点:

#./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-shared

#make

#make install

#ldconfig


最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。

3.使用方法

MP3转换AMR: ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr

AMR转换MP3: ffmpeg -i 1.amr 1.mp3

可能遇到的问题


1.ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现

“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,

解决办法是建立软链接:

#ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

2.此时如果出现以下提示:

ffmpeg: error while loading shared libraries: libavdevice.so.54: cannot open shared object file: No such file or directory

可以通过如下方式查看ffmpeg的动态链接库哪些没有找到:

# ldd `which ffmpeg`

        libavdevice.so.54 => not found

        libavfilter.so.3 => not found

        libavformat.so.54 => not found

        libavcodec.so.54 => not found

        libswresample.so.0 => not found

        libswscale.so.2 => not found

        libavutil.so.51 => not found

        libm.so.6 => /lib64/libm.so.6 (0x00002ab7c0eb6000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab7c100b000)

        libc.so.6 => /lib64/libc.so.6 (0x00002ab7c1125000)

        /lib64/ld-linux-x86-64.so.2 (0x00002ab7c0d9a000)

如果类似于上面的输出内容,查找以上类库:

# find /usr/local/lib/ | grep -E "libavdevice.so.54|libavfilter.so.3|libavcodec.so.54"

/usr/local/lib/libavfilter.so.3.17.100

/usr/local/lib/libavcodec.so.54.59.100

/usr/local/lib/libavdevice.so.54

/usr/local/lib/libavcodec.so.54

/usr/local/lib/libavfilter.so.3

/usr/local/lib/libavdevice.so.54.2.101

会发现全部在/usr/local/lib/下

查看链接库配置文件

# more  /etc/ld.so.conf | grep /usr/local/lib


如果不包含的话,需要编辑此文添加:

/usr/local/lib

/usr/local/lib64


运行配置命令

# ldconfig

----------------------------------------------------------------------------------------------------------

以上为转载

 

1 如果安装amrnb遇到错误:

configure: error: You need patch utility to prepare sources.

执行:

yum install patch

 

2 遇到ERROR: libopencore_amrnb not found

cd ..

wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz?r=http://sourceforge.net/projects/opencore-amr/&ts=1285256783&use_mirror=ufpr

tar -xf opencore-amr-0.1.2.tar.gz

cd opencore-amr-0.1.2

./configure

make && make install clean

3 出现"make: *** [libavcodec/libavcodec.so.55] Error 1"

make clean 一下再./configure ...

安装ffmpeg-php

(1)下载安装包

wget http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.5.3.1/ffmpeg-php-0.5.3.1.tbz2

或http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/

安装ffmepg-php

#tar -jxvf ffmpeg-php-0.6.0.tbz2

#cd ffmepg-php

#/usr/local/php/bin/phpize

#./configure --with-php-config=/usr/local/php/bin/php-config  --with-ffmpeg=/usr/local/ffmepg

#make && make install

报错情况

make: *** [ffmpeg-php.lo] 错误 1

解决:

# mv ffmpeg-php.loT ffmpeg-php.lo


make: *** [ffmpeg_movie.lo] 错误 1

解决:

# mv ffmpeg_movie.loT ffmpeg_movie.lo


make: *** [ffmpeg_frame.lo] 错误 1

解决:

# mv ffmpeg_frame.loT ffmpeg_frame.lo


make: *** [ffmpeg_errorhandler.lo] 错误 1

解决:

# mv ffmpeg_errorhandler.loT ffmpeg_errorhandler.lo


make: *** [ffmpeg_tools.lo] 错误 1

解决:

# mv ffmpeg_tools.loT ffmpeg_tools.lo

(4)测试

在php的配置php.ini文件,添加如下内容

extension=ffmpeg.so

重启apache或php-fpm,用php测试

/usr/local/php/bin/php -r 'phpinfo();' | grep ffmpeg

ffmpeg

ffmpeg support (ffmpeg-php) => enabled

ffmpeg-php version => 0.5.3.1

ffmpeg-php gd support => enabled

ffmpeg.allow_persistent => 0 => 0

ffmpeg.show_warnings => 0 => 0

............................省略




64位win7系统下ffmpeg的php扩展的安装

我在我的笔记本上安装了64位的win7,php的版本和上一个都是一样的,然后也是下载了那个版本(win32)的ffmpeg扩展包,然后把php_ffmpeg.dll放入到php的ext目录下,把其余的放入system32下。发现无效,去apache的的error.log查看也是没有什么错误提醒,搞得我很郁闷,我还在csdn上发帖子也是告诉我去error.log上去查看错误,但是就是看不到,我还尝试过在php.ini中写一个错误的dll,发现apache的error.log下也是看不到错误。

最终发现这样可以解决问题:还是把php_ffmpeg.dll放入到ext下,其余的dll不要放在system32下,而是要放入64位系统独有的C:\Windows\SysWOW64目录下,然后就好了。

PS:尽管ffpmpeg有64位的扩展,但是这个64位是和php的一致的,而不是和你的操作系统一致的。我最终调试出来问题是用在命令下下运行php,直接如果有错误的话,比如你加载了错误的dll,这个时候会弹出来错误的,很快帮助能解决问题!

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装配置及简单应用的例子。


libevent是一个基于事件驱动的高性能网络库。支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
PHP libevent扩展安装:
libevent扩展依赖于原始的libevent库,必须先把libevent库安装。
(1)安装libevent库
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
tar zxvf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable/
./configure --prefix=/usr/local/libevent-2.0.20/
make
make install

(2)安装libevent扩展(http://pecl.php.net/package/libevent)
wget http://pecl.php.net/get/libevent-0.1.0.tgz
tar -zxvf libevent-0.1.0.tgz
cd libevent-0.1.0
./configure --with-php-config=/usr/local/php54/bin/php-config --with-libevent=/usr/local/libevent-2.0.20/
make && make install
#php.ini添加extension=libevent.so

PHP Libevent扩展介绍:
(1)常量
libevent1.png
(2)函数
event_base_free() 释放资源,这不能销毁绑定事件
event_base_loop() 处理事件,根据指定的base来处理事件循环
event_base_loopbreak() 立即取消事件循环,行为各break语句相同
event_base_loopexit() 在指定的时间后退出循环
event_base_new() 创建并且初始事件
event_base_priority_init() 设定事件的优先级
event_base_set() 关联事件到事件base
event_buffer_base_set() 关联缓存的事件到event_base
event_buffer_disable() 禁用一个缓存的事件
event_buffer_enable() 启用一个指定的缓存的事件
event_buffer_fd_set() 改变一个缓存的文件系统描述
event_buffer_free() 释放缓存事件
event_buffer_new() 建立一个新的缓存事件
event_buffer_priority_set() 缓存事件的优先级设定
event_buffer_read() 读取缓存事件中的数据
event_buffer_set_callback() 给缓存的事件设置或重置回调hansh函数
event_buffer_timeout_set() 给一个缓存的事件设定超时的读写时间
event_buffer_watermark_set 设置读写事件的水印标记
event_buffer_write() 向缓存事件中写入数据
event_add() 向指定的设置中添加一个执行事件
event_del() 从设置的事件中移除事件
event_free() 清空事件句柄
event_new() 创建一个新的事件
event_set() 准备想要在event_add中添加事件

PHP Libevent扩展使用:
例1:5s后触发callback
$base = event_base_new();
$event = event_new();
 
event_set($event, 0, EV_TIMEOUT, function() {
    echo "function called";
});
event_base_set($event, $base);
 
event_add($event, 5000000);
event_base_loop($base);

例2:打印输入流
function print_line($fd, $events, $arg)
{
    static $max_requests = 0;
    $max_requests++;
    if ($max_requests == 10) {
        // exit loop after 10 writes
        event_base_loopexit($arg[1]);
    }
    echo  fgets($fd);
}
 
// create base and event
$base = event_base_new();
$event = event_new();
 
$fd = STDIN;
// set event flags
event_set($event, $fd, EV_READ | EV_PERSIST, 'print_line', array($event, $base));
// set event base
event_base_set($event, $base);
// enable event
event_add($event);
// start event loop
event_base_loop($base);

例3:实现简单web server
在cli执行后,打开浏览器2000端口试试看。
$socket = stream_socket_server ('tcp://0.0.0.0:2000', $errno, $errstr);
stream_set_blocking($socket, 0);
 
$base = event_base_new();
$event = event_new();
event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base);
event_base_set($event, $base);
event_add($event);
event_base_loop($base);
 
function ev_accept($socket, $flag, $base)
{
    $connection = stream_socket_accept($socket);
    stream_set_blocking($connection, 0);
 
    $buffer = event_buffer_new($connection, 'ev_read', NULL, 'ev_error',  $connection);
    event_buffer_base_set($buffer, $base);
    event_buffer_timeout_set($buffer, 30, 30);
    event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff);
    event_buffer_priority_set($buffer, 10);
    event_buffer_enable($buffer, EV_READ | EV_PERSIST);
 
    $GLOBALS['_'] = $buffer;  //这个buffer一定要赋给个全局的变量 貌似是传值过程中的bug 或者5.3.8的闭包还是有问题?
}
 
function ev_error($buffer, $error, $connection)
{
    event_buffer_disable($buffer, EV_READ | EV_WRITE);
    event_buffer_free($buffer);
    fclose($connection);
}
 
function ev_read($buffer, $connection)
{
    while ($read = event_buffer_read($buffer, 256)) {
 
    }
    fwrite($connection , date('Y-m-d H:i:s'));
    ev_error($buffer , '' , $connection);
}

php扩展有许多了而xcache配置只是php扩展中的一个比较常用的扩展了,下面我们就一起来看看php扩展xcache安装步骤吧,希望下文能够为各位带来帮助。

1、安装xcache扩展


tar -xvf xcache-3.2.0.tar.gz
 cd xcache-3.2.0
 ./configure --with-php-config=/usr/local/php/bin/php-config  --enable-xcache
 make && make install

会生成类似如下信息

[root@master xcache-3.2.0]# make install
<span style="line-height: 1.714285714;">Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/</span>

2、编辑php配置文件


vim /usr/local/php/etc/php.ini
 extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

重启新加载php配置

service php-fpm reload

 

4、编辑XCache Cacher的配置文件


上只是企业的Xcach的功能,而XCache的具体配置需要另外定义,在安装包目录下有个”xcache.ini
可以根据该文件的内容在php.ini中添加如下内容


xcache.shm_scheme = "mmap"
xcache.size = 60M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 4M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300

本文我们来讲讲 PHP_CodeSniffer 的介绍、Centos下安装、检查代码、卸载及使用实例,是一篇非常不错的教程,不可错过。

1.简介

PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查和嗅探PHP代码是否有违反一组预先设置好的编码标准的一个包,它是确保你的代码简洁一致的必不可少的开发工具,甚至还可以帮助程序员减少一些语义错误。

PHP_CodeSniffer中的编码标准是一组嗅探文件的集合,每一个嗅探文件只检查一部分编码标准。一次安装即可实现多个不同项目的编码标准的检查。PHP_CodeSniffer使用的默认的编码标准是 PEAR编码标准。

2.安装

快速安装(需要先安装php和pear)

pear install PHP_CodeSniffer

使用sublime text的同学可以直接安装插件phpcs,安装方法(Ctrl+Shift+P->pi(package install)->phpcs,安装成功后右键即可看到PHP Code Sniffer选项)
Pyrus安装

php pyrus.phar install pear/PHP_CodeSniffer

3.查看安装

[root@vb002 ~]# /usr/local/php/bin/phpcs -i
The installed coding standards are PSR1, Squiz, PHPCS, MySource, PEAR, Zend and PSR2


4.检查代码

[root@vb002 ~]# /usr/local/php/bin/phpcs /root/.jenkins/jobs/zentaotest/workspace/src/Money.php

FILE: /root/.jenkins/jobs/zentaotest/workspace/src/Money.php
----------------------------------------------------------------------
FOUND 6 ERRORS AFFECTING 6 LINES
----------------------------------------------------------------------
  2 | ERROR | Missing file doc comment
  3 | ERROR | Missing class doc comment
  5 | ERROR | Private member variable "amount" must be prefixed with
    |       | an underscore
  7 | ERROR | Missing function doc comment
 12 | ERROR | Missing function doc comment
 17 | ERROR | Missing function doc comment
----------------------------------------------------------------------

Time: 29ms; Memory: 3Mb


5.卸载安装

[root@vb002 ~]# pear uninstall PHP_CodeSniffer-2.3.3


6.使用示例

想要检查某个文件是否符合PEAR编码标准, 只需要指定文件的路径即可:

使用PHP_CodeSniffer检查文件

$ phpcs /path/to/code/myfile.php

FILE: /path/to/code/myfile.php

--------------------------------------------------------------------------------

FOUND 5 ERROR(S) AFFECTING 2 LINE(S)

--------------------------------------------------------------------------------

2 | ERROR | Missing file doc comment

20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE"

47 | ERROR | Line not indented correctly; expected 4 spaces but found 1

51 | ERROR | Missing function doc comment

88 | ERROR | Line not indented correctly; expected 9 spaces but found 6

--------------------------------------------------------------------------------

或者,如果你想要检查整个目录,你可以指定目录路径而不是文件路径:

使用PHP_CodeSniffer检查目录

$ phpcs /path/to/code

FILE: /path/to/code/myfile.php

--------------------------------------------------------------------------------

FOUND 5 ERROR(S) AFFECTING 5 LINE(S)

--------------------------------------------------------------------------------

2 | ERROR | Missing file doc comment

20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE"

47 | ERROR | Line not indented correctly; expected 4 spaces but found 1

51 | ERROR | Missing function doc comment

88 | ERROR | Line not indented correctly; expected 9 spaces but found 6

--------------------------------------------------------------------------------

FILE: /path/to/code/yourfile.php

--------------------------------------------------------------------------------

FOUND 1 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)

--------------------------------------------------------------------------------

21 | ERROR   | PHP keywords must be lowercase; expected "false" but found

|         | "FALSE"

21 | WARNING | Equals sign not aligned with surrounding assignments

--------------------------------------------------------------------------------

[!--infotagslink--]

相关文章

  • PHP添加MongoDB扩展实例教程

    由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • 如何开启mysql中的严格模式

    很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式,何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数...2013-10-04
  • 浅谈Vue开发人员的7个最好的VSCode扩展

    这篇文章主要介绍了浅谈Vue开发人员的7个最好的VSCode扩展,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。1、线...2015-11-08
  • JavaScript设计模式之职责链模式

    这篇文章主要介绍了JavaScript设计模式之职责链模式,对设计模式感兴趣的同学,可以参考下...2021-04-25
  • c#标准idispose模式使用示例

    下面将把C#里实现IDispose模式的代码展现出来,大家一起来学习一下,它的使用场合也很多的,当我们手动对网站,数据库作封装时,都会用的到...2020-06-25
  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25
  • 学习JavaScript设计模式之状态模式

    这篇文章主要为大家介绍了JavaScript设计模式中的状态模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-12
  • PHP安装threads多线程扩展基础教程

    一、下载pthreads扩展下载地址:http://windows.php.net/downloads/pecl/releases/pthreads二、判断PHP是ts还是nts版通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说...2015-11-24
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • JavaScript设计模式之命令模式

    这篇文章主要介绍了JavaScript设计模式之命令模式,对设计模式感兴趣的同学,可以参考下...2021-04-25
  • Java接口DAO模式代码原理及应用详解

    这篇文章主要介绍了Java接口DAO模式代码原理及应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-03
  • C#中的IDisposable模式用法详解

    这篇文章主要介绍了C#中的IDisposable模式用法,讲述了垃圾资源回收机制的实现,并对比分析了Dispose()方法、~DisposableClass()析构函数、虚方法Dispose(bool disposing)的原理,需要的朋友可以参考下...2020-06-25
  • 阿里云OpenSearch在php版sdk开启调试模式

    版本:php_v2.0.6 在CloudsearchClient的类中,开启debug模式,设置为true 如:$opts = array(&#39;host&#39;=>$host,&#39;debug&#39;=>true); 注意true不能加引号...2016-05-19
  • 学习JavaScript设计模式之单例模式

    这篇文章主要为大家介绍了JavaScript设计模式中的单例模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • C#使用Dispose模式实现手动对资源的释放

    这篇文章主要介绍了C#使用Dispose模式实现手动对资源的释放,涉及C#采用Dispose模式操作资源的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25