当前位置:首页 » 编程语言 » phpthetime

phpthetime

发布时间: 2025-07-29 07:07:40

‘壹’ 几种常见的php超时处理方法

【Web服务器超时处理】

[ Apache ]
一般在性能很高的情况下,缺省所有超时配置都是30秒,但是在上传文件,或者网络速度很慢的情况下,那么可能触发超时操作。
目前apachefastcgiphp-fpm模式下有三个超时设置:
fastcgi超时设置:
修改的fastcgi连接配置,类似如下:

复制代码 代码如下:

<IfMolemod_fastcgi.c>
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-
</IfMole>

缺省配置是30s,如果需要定制自己的配置,需要修改配置,比如修改为100秒:(修改后重启apache):

复制代码 代码如下:

<IfMolemod_fastcgi.c>
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock-idle-timeout100
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-
</IfMole>

如果超时会返回500错误,断开跟后端php服务的连接,同时记录一条apache错误日志:
[ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:commwithserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"aborted:idletimeout(30sec)
[ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:incompleteheaders(0bytes)receivedfromserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"
其他fastcgi配置参数说明:
复制代码 代码如下:

IdleTimeout发呆时限
ProcessLifeTime一个进程的最长生命周期,过期之后无条件kill
MaxProcessCount最大进程个数
DefaultMinClassProcessCount每个程序启动的最小进程个数
DefaultMaxClassProcessCount每个程序启动的最大进程个数
IPCConnectTimeout程序响应超时时间
IPCCommTimeout与程序通讯的最长时间,上面的错误有可能就是这个值设置过小造成的
MaxRequestsPerProcess每个进程最多完成处理个数,达成后自杀

[ Lighttpd ]
配置:lig
Lighttpd配置中,关于超时的参数有如下几个(篇幅考虑,只写读超时,写超时参数同理):
主要涉及选项:
server.max-keep-alive-idle=5
server.max-read-idle=60
server.read-timeout=0
server.max-connection-idle=360
复制代码 代码如下:

#每次keep-alive的最大请求数,默认值是16
server.max-keep-alive-requests=100
#keep-alive的最长等待时间,单位是秒,默认值是5
server.max-keep-alive-idle=1200
#lighttpd的work子进程数,默认值是0,单进程运行
server.max-worker=2
#限制用户在发送请求的过程中,最大的中间停顿时间(单位是秒),
#如果用户在发送请求的过程中(没发完请求),中间停顿的时间太长,lighttpd会主动断开连接
#默认值是60(秒)
server.max-read-idle=1200
#限制用户在接收应答的过程中,最大的中间停顿时间(单位是秒),
#如果用户在接收应答的过程中(没接完),中间停顿的时间太长,lighttpd会主动断开连接
#默认值是360(秒)
server.max-write-idle=12000
#读客户端请求的超时限制,单位是秒,配为0表示不作限制
#设置小于max-read-idle时,read-timeout生效
server.read-timeout=0
#写应答页面给客户端的超时限制,单位是秒,配为0表示不作限制
#设置小于max-write-idle时,write-timeout生效
server.write-timeout=0
#请求的处理时间上限,如果用了mod_proxy_core,那就是和后端的交互时间限制,单位是秒
server.max-connection-idle=1200

说明:
对于一个keep-alive连接上的连续请求,发送第一个请求内容的最大间隔由参数max-read-idle决定,从第二个请求起,发送请求内容的最大间隔由参数max-keep-alive-idle决定。请求间的间隔超时也由max-keep-alive-idle决定。发送请求内容的总时间超时由参数read-timeout决定。Lighttpd与后端交互数据的超时由max-connection-idle决定。
延伸阅读:

[ Nginx ]
配置:nf
复制代码 代码如下:

http{
#Fastcgi:(针对后端的fastcgi生效,fastcgi不属于proxy模式)
fastcgi_connect_timeout5;#连接超时
fastcgi_send_timeout10; #写超时
fastcgi_read_timeout10;#读取超时
#Proxy:(针对proxy/upstreams的生效)
proxy_connect_timeout15s;#连接超时
proxy_read_timeout24s;#读超时
proxy_send_timeout10s; #写超时
}

说明:
Nginx 的超时设置倒是非常清晰容易理解,上面超时针对不同工作模式,但是因为超时带来的问题是非常多的。
延伸阅读:
ml
ml
ml

【PHP本身超时处理】
[ PHP-fpm ]
配置:nf
复制代码 代码如下:

<?xmlversion="1.0"?>
<configuration>
//...
.
.
EquivalenttoPHP_FCGI_.fcgi
Usedwithanypm_style.
#php-cgi的进程数量
<valuename="max_children">128</value>
Thetimeout(inseconds)
Shouldbeusedwhen'max_execution_time'
'0s'means'off'
#php-fpm 请求执行超时时间,0s为永不超时,否则设置一个 Ns 为超时的秒数
<valuename="request_terminate_timeout">0s</value>
Thetimeout(inseconds).logfile
'0s'means'off'
<valuename="request_slowlog_timeout">0s</value>
</configuration>

说明:
在php.ini中,有一个参数max_execution_time可以设置PHP脚本的最大执行时间,但是,在php-cgi(php-fpm)中,该参数不会起效。真正能够控制PHP脚本最大执行时:
<valuename="request_terminate_timeout">0s</value>
就是说如果是使用mod_php5.so的模式运行max_execution_time是会生效的,但是如果是php-fpm模式中运行时不生效的。
延伸阅读:

[ PHP ]
配置:php.ini
选项:
max_execution_time=30
或者在代码里设置:
ini_set("max_execution_time",30);
set_time_limit(30);
说明:
对当前会话生效,比如设置0一直不超时,但是如果php的safe_mode打开了,这些设置都会不生效。
效果一样,但是具体内容需要参考php-fpm部分内容,如果php-fpm中设置了request_terminate_timeout的话,那么max_execution_time就不生效。
【后端&接口访问超时】
【HTTP访问】
一般我们访问HTTP方式很多,主要是:curl,socket,file_get_contents()等方法。
如果碰到对方服务器一直没有响应的时候,我们就悲剧了,很容易把整个服务器搞死,所以在访问http的时候也需要考虑超时的问题。
[ CURL 访问HTTP]
CURL 是我们常用的一种比较靠谱的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等。
CURL:
curl_setopt($ch,opt)可以设置一些超时的设置,主要包括:
*(重要)CURLOPT_TIMEOUT设置cURL允许执行的最长秒数。
*(重要)CURLOPT_TIMEOUT_MS设置cURL允许执行的最长毫秒数。(在cURL7.16.2中被加入。从PHP5.2.3起可使用。)
CURLOPT_CONNECTTIMEOUT在发起连接前等待的时间,如果设置为0,则无限等待。
CURLOPT_CONNECTTIMEOUT_MS尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。在cURL7.16.2中被加入。从PHP5.2.3开始可用。
CURLOPT_DNS_CACHE_TIMEOUT设置在内存中保存DNS信息的时间,默认为120秒。
curl普通秒级超时:
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,60);//只需要设置一个秒的数量就可以
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_USERAGENT,$defined_vars['HTTP_USER_AGENT']);
curl普通秒级超时使用:
curl_setopt($ch,CURLOPT_TIMEOUT,60);
curl如果需要进行毫秒超时,需要增加:
curl_easy_setopt(curl,CURLOPT_NOSIGNAL,1L);
或者是:
curl_setopt($ch,CURLOPT_NOSIGNAL,true);是可以支持毫秒级别超时设置的
curl一个毫秒级超时的例子:
复制代码 代码如下:

<?php
if(!isset($_GET['foo'])){
//Client
$ch=curl_init('');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_NOSIGNAL,1);//注意,毫秒超时一定要设置这个
curl_setopt($ch,CURLOPT_TIMEOUT_MS,200);//超时毫秒,cURL7.16.2中被加入。从PHP5.2.3起可使用
$data=curl_exec($ch);
$curl_errno=curl_errno($ch);
$curl_error=curl_error($ch);
curl_close($ch);
if($curl_errno>0){
echo"cURLError($curl_errno):$curl_errorn";
}else{
echo"Datareceived:$datan";
}
}else{
//Server
sleep(10);
echo"Done.";
}
?>

其他一些技巧:
1. 按照经验总结是:cURL版本>=libcurl/7.21.0版本,毫秒级超时是一定生效的,切记。
2. curl_multi的毫秒级超时也有问题。。单次访问是支持ms级超时的,curl_multi并行调多个会不准
[流处理方式访问HTTP]
除了curl,我们还经常自己使用fsockopen、或者是file操作函数来进行HTTP协议的处理,所以,我们对这块的超时处理也是必须的。
一般连接超时可以直接设置,但是流读取超时需要单独处理。
自己写代码处理:
复制代码 代码如下:

$tmCurrent=gettimeofday();
$intUSGone=($tmCurrent['sec']-$tmStart['sec'])*1000000
+($tmCurrent['usec']-$tmStart['usec']);
if($intUSGone>$this->_intReadTimeoutUS){
returnfalse;
}

或者使用内置流处理函数stream_set_timeout()和stream_get_meta_data()处理:
复制代码 代码如下:

<?php
//Timeoutinseconds
$timeout=5;
$fp=fsockopen("",80,$errno,$errstr,$timeout);
if($fp){
fwrite($fp,"GET/HTTP/1.0rn");
fwrite($fp,"Host:rn");
fwrite($fp,"Connection:Closernrn");
stream_set_blocking($fp,true);//重要,设置为非阻塞模式
stream_set_timeout($fp,$timeout);//设置超时
$info=stream_get_meta_data($fp);
while((!feof($fp))&&(!$info['timed_out'])){
$data.=fgets($fp,4096);
$info=stream_get_meta_data($fp);
ob_flush;
flush();
}
if($info['timed_out']){
echo"ConnectionTimedOut!";
}else{
echo$data;
}
}

file_get_contents超时:
复制代码 代码如下:

<?php
$timeout=array(
'http'=>array(
'timeout'=>5//设置一个超时时间,单位为秒
)
);
$ctx=stream_context_create($timeout);
$text=file_get_contents("",0,$ctx);
?>

fopen超时:
复制代码 代码如下:

<?php
$timeout=array(
'http'=>array(
'timeout'=>5//设置一个超时时间,单位为秒
)
);
$ctx=stream_context_create($timeout);
if($fp=fopen("","r",false,$ctx)){
while($c=fread($fp,8192)){
echo$c;
}
fclose($fp);
}
?>

【Mysql
php中的mysql客户端都没有设置超时的选项,mysqli和mysql都没有,但是libmysql是提供超时选项的,只是我们在php中隐藏了而已。
那么如何在PHP中使用这个操作捏,就需要我们自己定义一些MySQL操作常量,主要涉及的常量有:
MYSQL_OPT_READ_TIMEOUT=11;
MYSQL_OPT_WRITE_TIMEOUT=12;
这两个,定义以后,可以使用options设置相应的值。
不过有个注意点,mysql内部实现:
1.超时设置单位为秒,最少配置1秒
2.但mysql底层的read会重试两次,所以实际会是3秒
重试两次+自身一次=3倍超时时间,那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
查看一个设置访问mysql超时的php实例:
复制代码 代码如下:

<?php
//自己定义读写超时常量
if(!defined('MYSQL_OPT_READ_TIMEOUT')){
define('MYSQL_OPT_READ_TIMEOUT',11);
}
if(!defined('MYSQL_OPT_WRITE_TIMEOUT')){
define('MYSQL_OPT_WRITE_TIMEOUT',12);
}
//设置超时
$mysqli=mysqli_init();
$mysqli->options(MYSQL_OPT_READ_TIMEOUT,3);
$mysqli->options(MYSQL_OPT_WRITE_TIMEOUT,1);
//连接数据库
$mysqli->real_connect("localhost","root","root","test");
if(mysqli_connect_errno()){
printf("Connectfailed:%s/n",mysqli_connect_error());
exit();
}
//执行查询sleep1秒不超时
printf("Hostinformation:%s/n",$mysqli->host_info);
if(!($res=$mysqli->query('selectsleep(1)'))){
echo"query1error:".$mysqli->error."/n";
}else{
echo"Query1:querysuccess/n";
}
//执行查询sleep9秒会超时
if(!($res=$mysqli->query('selectsleep(9)'))){
echo"query2error:".$mysqli->error."/n";
}else{
echo"Query2:querysuccess/n";
}
$mysqli->close();
echo"closemysqlconnection/n";
?>

延伸阅读:

【Memcached】
[PHP扩展]
php_memcache客户端:
连接超时:boolMemcache::connect(string$host[,int$port[,int$timeout]])
在get和set的时候,都没有明确的超时设置参数。
libmemcached客户端:在php接口没有明显的超时参数。
说明:所以说,在PHP中访问Memcached是存在很多问题的,需要自己hack部分操作,或者是参考网上补丁。
[C&C++访问Memcached]
客户端:libmemcached客户端
说明:memcache超时配置可以配置小点,比如5,10个毫秒已经够用了,超过这个时间还不如从数据库查询。
下面是一个连接和读取set数据的超时的C++示例:
复制代码 代码如下:

//创建连接超时(连接到Memcached)
memcached_st*MemCacheProxy::_create_handle()
{
memcached_st*mmc=NULL;
memcached_return_tprc;
if(_mpool!=NULL){//getfrompool
mmc=memcached_pool_pop(_mpool,false,&prc);
if(mmc==NULL){
__LOG_WARNING__("MemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);
}
returnmmc;
}
memcached_st*handle=memcached_create(NULL);
if(handle==NULL){
__LOG_WARNING__("MemCacheProxy","create_handleerror");
returnNULL;
}
//设置连接/读取超时
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_HASH,MEMCACHED_HASH_DEFAULT);
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_NO_BLOCK,_noblock);//参数MEMCACHED_BEHAVIOR_NO_BLOCK为1使超时配置生效,不设置超时会不生效,关键时候会悲剧的,容易引起雪崩
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,_connect_timeout);//连接超时
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_RCV_TIMEOUT,_read_timeout);//读超时
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_SND_TIMEOUT,_send_timeout);//写超时
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_POLL_TIMEOUT,_poll_timeout);
//设置一致hash
//memcached_behavior_set_distribution(handle,MEMCACHED_DISTRIBUTION_CONSISTENT);
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_DISTRIBUTION,MEMCACHED_DISTRIBUTION_CONSISTENT);
memcached_returnrc;
for(uinti=0;i<_server_count;i++){
rc=memcached_server_add(handle,_ips[i],_ports[i]);
if(MEMCACHED_SUCCESS!=rc){
__LOG_WARNING__("MemCacheProxy","addserver[%s:%d]failed.",_ips[i],_ports[i]);
}
}
_mpool=memcached_pool_create(handle,_min_connect,_max_connect);
if(_mpool==NULL){
__LOG_WARNING__("MemCacheProxy","create_poolerror");
returnNULL;
}
mmc=memcached_pool_pop(_mpool,false,&prc);
if(mmc==NULL){
__LOG_WARNING__("MyMemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);
}
//__LOG_DEBUG__("MemCacheProxy","gethandle[%p]",handle);
returnmmc;
}
//设置一个key超时(set一个数据到memcached)
boolMemCacheProxy::_add(memcached_st*handle,unsignedint*key,constchar*value,intlen,unsignedinttimeout)
{
memcached_returnrc;
chartmp[1024];
snprintf(tmp,sizeof(tmp),"%u#%u",key[0],key[1]);
//有个timeout值
rc=memcached_set(handle,tmp,strlen(tmp),(char*)value,len,timeout,0);
if(MEMCACHED_SUCCESS!=rc){
returnfalse;
}
returntrue;
}

//Memcache读取数据超时(没有设置)
libmemcahed源码中接口定义:
LIBMEMCACHED_APIchar*memcached_get(memcached_st*ptr,constchar*key,size_tkey_length,size_t*value_length,uint32_t*flags,memcached_return_t*error);
LIBMEMCACHED_APImemcached_return_tmemcached_mget(memcached_st*ptr,constchar*const*keys,constsize_t*key_length,size_tnumber_of_keys);
从接口中可以看出在读取数据的时候,是没有超时设置的。
延伸阅读:

【如何实现超时】
程序中需要有超时这种功能,比如你单独访问一个后端Socket模块,Socket模块不属于我们上面描述的任何一种的时候,它的协议也是私有的,那么这个时候可能需要自己去实现一些超时处理策略,这个时候就需要一些处理代码了。
[PHP中超时实现]
一、初级:最简单的超时实现 (秒级超时)
思路很简单:链接一个后端,然后设置为非阻塞模式,如果没有连接上就一直循环,判断当前时间和超时时间之间的差异。
phpsocket中实现原始的超时:(每次循环都当前时间去减,性能会很差,cpu占用会较高)
复制代码 代码如下:

<?
$host="127.0.0.1";
$port="80";
$timeout=15;//timeoutinseconds
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)
ordie("Unabletocreatesocketn");
socket_set_nonblock($socket) //务必设置为阻塞模式
ordie("Unabletosetnonblockonsocketn");
$time=time();
//循环的时候每次都减去相应值
while(!@socket_connect($socket,$host,$port))//如果没有连接上就一直死循环
{
$err=socket_last_error($socket);
if($err==115||$err==114)
{
if((time()-$time)>=$timeout)//每次都需要去判断一下是否超时了
{
socket_close($socket);
die("Connectiontimedout.n");
}
sleep(1);
continue;
}
die(socket_strerror($err)."n");
}
socket_set_block($this->socket)//还原阻塞模式
ordie("Unabletosetblockonsocketn");
?>

二、升级:使用PHP自带异步IO去实现(毫秒级超时)
说明:
异步IO:异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。异步IO将比特分成小组进行传送,小组可以是8位的1个字符或更长。发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。
多路复用:复用模型是对多个IO操作进行检测,返回可操作集合,这样就可以对其进行操作了。这样就避免了阻塞IO不能随时处理各个IO和非阻塞占用系统资源的确定。
使用socket_select()实现超时
socket_select(...,floor($timeout),ceil($timeout*1000000));
select的特点:能够设置到微秒级别的超时!
使用socket_select()的超时代码(需要了解一些异步IO编程的知识去理解)
复制代码 代码如下:

编程 调用类 编程#
<?php
$server=newServer;
$client=newClient;
for(;;){
foreach($select->can_read(0)as$socket){
if($socket==$client->socket){
//NewClientSocket
$select->add(socket_accept($client->socket));
}
else{
//there'ssomethingtoreadon$socket
}
}
}
?>
编程 异步多路复用IO & 超时连接处理类 编程
<?php
classselect{
var$sockets;
functionselect($sockets){
$this->sockets=array();
foreach($socketsas$socket){
$this->add($socket);
}
}
functionadd($add_socket){
array_push($this->sockets,$add_socket);
}
functionremove($remove_socket){
$sockets=array();
foreach($this->socketsas$socket){
if($remove_socket!=$socket)
$sockets[]=$socket;
}
$this->sockets=$sockets;
}
functioncan_read($timeout){
$read=$this->sockets;
socket_select($read,$write=NULL,$except=NULL,$timeout);
return$read;
}
functioncan_write($timeout){
$write=$this->sockets;
socket_select($read=NULL,$write,$except=NULL,$timeout);
return$write;
}
}
?>

[C&C++中超时实现]
一般在linuxC/C++中,可以使用:alarm()设置定时器的方式实现秒级超时,或者:select()、poll()、epoll()之类的异步复用IO实现毫秒级超时。也可以使用二次封装的异步io库(libevent,libev)也能实现。
一、使用alarm中用信号实现超时 (秒级超时)
说明:Linux内核connect超时通常为75秒,我们可以设置更小的时间如10秒来提前从connect中返回。这里用使用信号处理机制,调用alarm,超时后产生SIGALRM信号(也可使用select实现)
用alarym秒级实现connect设置超时代码示例:
复制代码 代码如下:

//信号处理函数
staticvoidconnect_alarm(intsigno)
{
debug_printf("SignalHandler");
return;
}
//alarm超时连接实现
staticvoidconn_alarm()
{
Sigfunc*sigfunc;//现有信号处理函数
sigfunc=signal(SIGALRM,connect_alarm);//建立信号处理函数connect_alarm,(如果有)保存现有的信号处理函数
inttimeout=5;
//设置闹钟
if(alarm(timeout)!=0){
//...闹钟已经设置处理
}
//进行连接操作
if(connect(m_Socket,(structsockaddr*)&addr,sizeof(addr))<0){
if(errno==EINTR){//如果错误号设置为EINTR,说明超时中断了
debug_printf("Timeout");

‘贰’ CS1.6服务器的架设,包括AMX插件的加入方法

服务器完全架设手册
没有人一生出来就什么都会的,同样我也是什么都不会,自己慢慢学的。我知道Dcoo上有很多高手,如果本文有错误的地方,请不吝指正。以下基本都是偶在Dcoo等论坛上学到的服务器架设经验之谈,发出来给大家看看,让大家都从菜鸟转型为初级的服务器架设高手。言归正传,一步一步来:
一、 首先
你必须要有个高配置的电脑,如果是做服务器的话,最好内存是在512M以上的机器,至于 内存 CPU 等对架设CS服务器的影响,请查看其他帖子!然后是要了解的是,你上网的网络结构,是通过 Modem+路由+交换机 上网,还是用 代理服务器+交换机 上网,我的论坛的帖子也有介绍,在此我就不在多余重复说了。可以到我签名的地址去看看!
二、 CS的服务器端文件

由于现在CS1.6已经是比赛的版本了,所以偶就以1.6的为主,1.5的其实也一样的,但是会少了很多的特效,比如1.5就不支持中文等。这里提供的是DcOo 1.6 3213的服务器端版本。
三、开始设置服务器
完成以后,先不要运行,运行的话是进入游戏,而不是开始服务器!进入刚才安装的那个文件夹,找到Hlds.exe文件,创建一个快捷方式,如图:

然后把刚才那个快捷方式改一下名字,方便以后使用,偶改为Server,接下来是重点了。。。。请注意听了哦!
看到hlds.exe 后面那里的参数了没?

那里就是服务器运行的时候必须要用到的启动参数,参数不同,服务器运行的效果也不同!以偶的为例,
-game cstrike +servercfgfile server.cfg -nomaster -insecure -port 27016 +maxplayers 32 +map de_st2 +sv_lan 1 –console
偶一个一个解释好了:)
-game cstrike 这个就是指定以反恐精英为游戏的Mod,如果不指定的话就是半条命的模式,听说也不错很好玩的哦,没玩过

+servercfgfile server.cfg 这个就是指定服务器的配置文件,server.cfg这个文件放在cstrike下,后面偶会详细介绍一下该文件的

-nomaster 加载这个参数就是让服务器不上WON认证,避免因为出国网络不通导致的服务器问题。

-insecure 这个参数偶一下想不起来是干嘛用的了。其他知道的朋友,请指教,谢谢!

-port 27016 指定服务器运行时候的端口,范围最好是在27015-27020 之间,据我的测试,局域网列表能刷出来的就是在这个范围内,当然,如果你想用来做比赛服务器不想让其他人进的话,你可以指定任意不被占用的端口。

+maxplayers 32 这个参数是指定服务器最大进入玩家数,理论上最高能进32人,有的地图最高只能进20人,比如CS_italy 那些早期救人质的图都这样的。并不是说一定要以32人为最大,这个要和你的网络状况及服务器配置相联系的,关于CPU 内存 网络带宽 之间的联系,请在Dcoo上搜索一下,或者到我的论坛去查找一下,只有人数合适了,你的服务器才能运行在快速稳定的状态!

+map de_st2 这个参数就是当服务器一开始运行的时候,运行的第一张地图,你可以该为任意的,但是要注意,最好以 cstrike\maps 目录下的地图,不然服务器会出错!

图中,以bsp为结尾的文件都是地图文件,注意:参数不用带文件全名,例如 de_st2 就可以了, 没必要这样 de_st2.bsp

-console 控制台,如果不带这个参数的话,你架设好的服务器就不能在那个黑底白字的窗口上输入一些服务器命令

+sv_lan 1 这个参数是控制该服务器是局域网还是战网的一个重要参数,当为 0 的时候,外网玩家也可以进入,当为 1 的时候,就只有局域网的玩家才能进入。如果要做面向公网和内网(不知道什么叫公网和内网的,请自己找资料学习),这个参数建议为 0
综合以上讲解,很容易了解,

-game cstrike +servercfgfile server.cfg -nomaster -insecure -port 27016 +maxplayers 32 +map de_st2 +sv_lan 1 -console

用这些个参数架设的服务器是一个CS1.6反恐精英,不通过WON验证,游戏端口为27016,人数最多为32人,开始游戏地图为沙漠2,面向局域网的服务器!

如果要面向内外网的话,去掉 -nomaster +sv_lan 1这两个参
参数配置正确了,就可以开始运行服务器了?别急,还没配置完全呢,还有一个比较重要的文件server.cfg还没配置呢!

进入安装目录的cstrike下,你可以看到一个Server.cfg文件,这个文件是一个文本文件,但是没和任何文本编辑软件关联,也就是说,当你打开的时候,系统会提示你打开方式,你可以选择用记事本打开。打开以后你会看到如下的信息:
(注意:一下信息是毛毛虫在当时编写的时候Server.cfg文件。而我在编写的时候没有参考毛毛虫的脚本而是依照国际比赛服务器的标准而设置的,这点要千万注意!!)
rcon_password "dcoo"
hostname "迪酷网 DcOo CS1.6 Server"
sv_maxspeed 320
mp_autokick 0
mp_autocrosshair 0
mp_autoteambalance 0
mp_buytime 0.25
mp_consistency 1
mp_c4timer 35
mp_fadetoblack 1
mp_falldamage 1
mp_flashlight 1
mp_forcecamera 3
mp_friendlyfire 1
mp_freezetime 10
mp_fraglimit 0
mp_hostagepenalty 0
mp_limitteams 6
mp_logfile 1
mp_logmessages 1
mp_logdetail 3
mp_maxrounds 0
mp_playerid 0
mp_roundtime 2.5
mp_startmoney 800
mp_timelimit 60
mp_tkpunish 0
mp_winlimit 0
sv_aim 0
sv_airaccelerate 10
sv_airmove 1
sv_allowdownload 0
sv_clienttrace 1.0
sv_clipmode 0
sv_allowupload 0
sv_cheats 0
sv_gravity 800
sv_maxrate 25000
sv_maxspeed 320
sv_maxupdaterate 101
sys_ticrate 10000
decalfrequency 60
pausable 0
log on
decalfrequency 60
edgefriction 2
host_framerate 0
exec listip.cfg
exec banned.cfg

哇*,,,Dcoo的也太简单了吧,我记得以前还带解释的,现在这么都这样了呢?!

不管他,反正我也看得懂是啥意思,我来解释好了!只解释一些常用的,没解释到的推荐用默认值。一般 0 为关 1 为开

rcon_password "dcoo" 这个是进入服务器的密码,如果不改的话,就相当于是一个带密码的服务器,推荐去掉 "" 里面部分
hostname "迪酷网 DcOo CS1.6 Server" 服务器的名字,这个当然要改的了,改为你想改的名字就行了
sv_maxspeed 320 重力速度什么的,不推荐修改用默认的好了。。
mp_autokick 0 自动踢人,当某位玩家因为一些其他的因素,常时间不动或者死机等,系统就会踢除该玩家,0 为关 1为开
mp_autocrosshair 0 准心的大小自动调节,建议不要改
mp_autoteambalance 0 双方自动平衡,建议开启,否则会出现两边队伍人数不平衡
mp_buytime 0.25 购买武器时间 以60秒为单位,60*0.25=15秒
mp_c4timer 35 C4爆炸时间,国际比赛好像是35秒,推荐用这个值就行了
mp_fadetoblack 1 死后黑屏,推荐改为0
mp_falldamage 1 跌落损伤,这个不用改
mp_flashlight 1 手电筒开启
mp_forcecamera 3 死亡后视角 有0 1 2 3 三种模式,其中0 为视角固定模式 1 为仅限队友视角 2 为仅限队友第一视角 3为自由观看模式
mp_friendlyfire 1 自伤模式,自己人能打自己人,不是比赛服的话推荐关掉
mp_freezetime 10 开始买枪时候的静止不能行走的冻结时间,10秒也太夸张了。3秒就够了
mp_roundtime 2.5 每回合的时间,以分为单位,2.5为两分半钟,推荐改为3或者3.5 如果是死亡模式的话可以改为5
mp_startmoney 800 开局资金,一般都是800 最高可以改为16000 不推荐改!
mp_timelimit 60 每个地图玩的时间 60分钟合适了。如果改为0 的话就是不限制时间
mp_tkpunish 0 Team Killer 就是上局杀了自己方人的,这局就会挨惩罚,好像是死一局,开启为1 要和之前那个mp_friendlyfire 1同时开启才用用
mp_winlimit 0 当某方胜利多少局的时候换图,0 为关闭
当然还有其他比较详细的介绍,我这个只是大概介绍一下,偶发偶服的出来给大家看看:

sv_password ""
rcon_password "feilang"
hostname "南宁市飞浪网CS1.6比赛服 [CD]"
sv_maxrate 10000
sv_minrate 1000
sv_maxspeed 320
// 暂停游戏 禁止0/允许1
pausable
// 作弊模式 关闭0/开启1
sv_cheats 0

// 自动瞄准 关闭0/开启1
sv_aim 0
// 战术手电 允许1/禁止0
mp_flashlight 1
// 脚步声 开启1/关闭0
mp_footsteps 1
// 高处落下伤害 开启1/关闭0
mp_falldamage 1
// 自动踢出不动的玩家 开启1/关闭0
mp_autokick 1
// 观察员模式 开启1/关闭0
allow_spectators 1
// 服务端设定游戏复位的时间,包括杀人数、武器、金钱和得分。设0不复位。
sv_restartround 2
// 每局时间30分钟
mp_timelimit 45
// 购买武器冻结时间 (0-45)建议5秒以内。
mp_freezetime 3
// 每回合4分钟
mp_roundtime 3
//购买武器装备时间(0.25-1.5)即15秒-90秒
mp_buytime 0.25
// 炸弹倒计时时间 (15-75)
mp_c4timer 35
//开始游戏时的金钱数量(800-16000)
mp_startmoney 800
// 死亡后视角 1本队队友 2原地 0无限制
mp_forcechasecam 1
// 死亡后视角模式 0自由跟随/1固定跟随
mp_chasecam 1
// 人物死亡后屏幕 不变黑0/变黑1
mp_fadetoblack 0
// 友军误伤 关闭0/开启1
mp_friendlyfire 0
// 手雷友军伤害 关闭0/开启1
mp_friendly_grenade_damage 0
// 杀害友军惩罚 0不惩罚/惩罚:杀害队友超过(1-n)人,下一回合自动死亡
mp_tkpunish 0
// 自动调整双方队伍平衡 不调整0/调整(1-n)个人
mp_autoteambalance 1
// 双方人数差超过n人即自动调整人数差异 0关闭
mp_limitteams 2
// 杀害人质惩罚 0不惩罚/惩罚:规定时间内伤害人质超过(1-n)人自动踢出
mp_hostagepenalty 0
// 杀人数、得分上限 无0/有(1-n),超过上限就换地图。
mp_fraglimit 0
// 胜利次数上限无0/有(1-n),超过上限就换地图。
mp_winlimit 0
// 回合上限 无0/有(1-n),超过上限就换地图。
mp_maxrounds 0
// 允许下载 开启1/关闭0
sv_allowdownload 1

// 允许下载(sv_allowdownload 1)开启时控制是否允许玩家的LOGO传送 允许1/禁止0
sv_send_logos 1
// 允许下载(sv_allowdownload 1)开启时控制是否允许资源文件传送 允许1/禁止0
sv_send_resources 1
// 允许上传 关闭0/开启1
sv_allowupload 1
// 服务器重力设置 默认正常重力800,范围-999到99999
sv_gravity 800
// 投票比率(大家可以通过投票踢出作弊者和更换地图) (0.1-1)
mp_mapvoteratio 0.6
// 设定鬼魂模式刷新值(0.1-1)
mp_ghostfrequency 0.1
// 服务器高品质纹理 关闭0/开启1
sv_sendvelocity 0
// 服务器减少LAG延迟现象(对服务器要求高) 关闭0/开启1
mp_lowlag 0
// 服务器细节数据发送 默认300 ,可减低到250、200,改善速度。
mp_decals 300
// 服务器是否允许麦克风语音通讯 允许1/禁止0
sv_voiceenable 1
// 服务器是否允许客户端之间使用语音通信 允许1/禁止0
sv_alltalk 0
sv_region 4
//区域 4为亚洲

cdrequired "1"
cdrequiredversion auto
//为1 是需要CD ,第二行为自动检测CD版本
// 服务器是否记录文件 不记录0/记录1
mp_logfile 0
// 是否在记录文件里记录谈话内容 不记录0/记录1
mp_logmessages 0
// load ban files
exec listip.cfg
exec banned.cfg

红色字体部分复制下来,粘贴入你的server.cfg文件,就和我的服务器设置一样了,当然你要记得改密码和服务器名字哦!
当然,你也可以直接用cs1.6目录下那几个bat批处理文件架设的服务器!

编辑一下 setmaster add 69.28.151.178:27010 看到没有,这个肯定不是你的IP,你要做的就是改为你自己的IP 。注意哦,192.168.X.X这个不是你的公网IP,这个是你的局域网IP,如果你是网吧的技术员的话,自己想法子找到你网吧用的线路的IP,然后做好对应的端口映射,映射已经超出本帖的范围了,在此先不教。相关的请到我的论坛去看找一下各种路由的映射方法。

接下来就要解释一下其他几个个性化服务器必须要修改到的文件,这两个也是其中的一部分:

mapcycle.txt 地图列表文件,也就是当服务器运行的时候,就只会在这个文件中有的地图之间从上到下运行,
de_st2
de_inferno
de_cbble
de_train
de_nuke
de_cpl_mill
de_aztec
de_st
从第一个到最后一个,然后在循环
motd.txt 这个文件比较特殊,这个就是当玩家进入你的服务器的时候,看到的第一个欢迎logo,它是以文本文件形式存在,但是确实一个html网页的源码,如果你有网页制作的功底的话,可以做得很好看,在此我就献丑,放一下我对这个文件修改以后的效果给大家看看:

如果你没那个功底,你可以找会的朋友帮你做一个,不是很难。
接下来的就是问最多的插件问题了,点击这里下载用到的文件
解压到cstrike的addons目录下,完成后目录结构如下:

第一个amxmodx 是amx插件的主文件夹,其下的configs 是一些插件的设置amxx.cfg 是一些amx的设置,plugins.ini是插件的调用配置管理,users.ini 是用户配置文件,用户的一些权限都是在这里设置的。amxmodx\doc 里面有个帮助文件,那里可以学到更多关于amx的管理和使用,amxmodx\plugins 是一些插件的源码文件的存放位置,大致介绍各个文件夹放在什么位置,等下偶会详细解释最主要的amx.cfg 和plugins.ini还有 users.ini的配置!

addons\Booster 这个是服务器加速插件,推荐一定要开启,那样服务器才能运行在一个高速的状态下;开启于关闭我会在后面介绍;

addons\cdeath 这个是CD反作弊服务器版的文件,很多朋友都不知道怎么样使用,偶等下在介绍吧!

addons\metamod 下的 plugins.ini addons\amxmodx\configs 下的 plugins.ini 又不同,这个plugins.ini 是所有插件的基础,另外一个只是针对amx加载的插件!

所以接下来可能要花很长的时间和篇幅对以下插件进行讲解:

addons\metamod\plugins.ini
addons\amxmodx\configs\amxx.cfg
addons\amxmodx\configs\plugins.ini
addons\amxmodx\configs\users.ini

现在我开始讲解一下所有插件的根基,addons\metamod\plugins.ini 的配置吧!

win32 addons\booster\booster_mm.dll 这个是服务器的加速插件,如果不加载这个东西的话,服务器最高不超过99Fps
;win32 dlls\chicken_mm.dll 这个是一个娱乐用的,也就是变成小鸡的插件。
;win32 addons\amx\dlls\amx_mm.dll 这个是加载amx的插件,如果不加载的话,很多基于amx的插件就用不了,比如死亡
;win32 addons\amx\dlls\fun_ms.dll 这个也是死亡和魔兽服务器中必须要用到的插件
;win32 addons\amx\dlls\csstats_ms.dll 这个也是死亡和魔兽服务器中必须要用到的插件
;win32 addons\amx\dlls\war3_ms.dll 这个是Amx的一个子插件,魔兽插件,可以在该plugins.ini 中配置,也可以在另外那个plugins.ini (addons\amxmodx\configs\plugins.ini )中加载但是就只能加载一个,重复的不算
;win32 dlls\monster_mm.dll 这个也是Amx的一个子插件,同样可以在这里配置也可以在另外那个 plugins.ini 中配置
;win32 addons/wwcl/dlls/pcawwclconfig_mm.dll WWCL 这个是一个规则插件,某种程度上也能防到某些玩家作弊
win32 addons/cdeath/cdmod.dll 这个就是大名鼎鼎的 Cheating-Death CD反作弊的插件,不过现在最新的4.29注意加载的话,会使服务器出错,在后面我会详细介绍一下最新版本的CD如何加载!

所有的插件以“;”(半角模式下的分号) 开启和关闭 也就是说,你要开启某个插件的话,就不能在该行之前用这个符号,如果不想开启某个插件的话,就在该行 即win32的前面,加上一个这个,就能让那个插件不运行了!
比如:
我想屏蔽ChickenMod 1.0.5.1插件,只需要在win32 dlls\chicken_mm.dll这行行首加入;注释符号屏蔽掉这行即可,即将win32 dlls\chicken_mm.dll改为;win32 dlls\chicken_mm.dll
这样我们在启动服务器时,服务器就不会启动ChickenMod 1.0.5.1插件插件。如果想再次开启ChickenMod 1.0.5.1插件,只需要把此行行首的;符号去掉并保存plugins.ini文件即可。其他插件的屏蔽/开启也是如此。

也许大家这里看不是很明白,我找了张图出来,大家看看参考下:

这个图不是安装了Dcoo这个版本的时候带的,是小凡cs1.5纪念版中有的,放出来的意义是让大家更直观的了解各个命令行的意思!
该版本下的这个文件的内容太简单了,不过基本功能倒是没丢失,如下

; 说明:
; 开启某个模块请去掉前面的分号
; 关闭某个模块请在前面加上分号

;////////////////////////////////////////////////////////////
;// --------------------- Booster ------------------------ //
;////////////////////////////////////////////////////////////
; 请按自己的CPU选择你需要的程序, 以下2个只能开启一个
win32 addons/Booster/booster_mm.dll
;win32 addons/Booster/booster_686_mm.dll

;////////////////////////////////////////////////////////////
;// ------------------- AMX Mod X ------------------------ //
;////////////////////////////////////////////////////////////
win32 addons/amxmodx/dlls/amxmodx_mm.dll
; linux 请按自己的CPU选择你需要的程序, 以下2个只能开启一个
linux addons/amxmodx/dlls/amxmodx_mm_i386.so
;linux addons/amxmodx/dlls/amxmodx_mm_amd64.so

;////////////////////////////////////////////////////////////
;// --------------- Cheating Death ----------------------- //
;////////////////////////////////////////////////////////////
; win32 请按自己的CPU选择你需要的程序, 以下5个只能开启一个
win32 addons/CDeath/cdmod.dll
;win32 addons/CDeath/cdmod_i486.dll
;win32 addons/CDeath/cdmod_i586.dll
;win32 addons/CDeath/cdmod_k7.dll
;win32 addons/CDeath/cdmod_p4.dll
; linux 请按自己的CPU选择你需要的程序, 以下5个只能开启一个
linux addons/CDeath/cdmod_i386.so
;linux addons/CDeath/cdmod_i586.so
;linux addons/CDeath/cdmod_i686.so
;linux addons/CDeath/cdmod_k7.so
;linux addons/CDeath/cdmod_p4.so

有点乱,大家就只要注意没分号的部分吧!linux不在本帖的讨论范围内,偶对linux的服务器不了解,虽然现在也在学习中
接下来就是amxx.cfg和plugins.ini 还有users.ini 的配置讲解了,先从amxx.cfg开始好了:)

其实amxx.cfg文件里面已经有很多的提示了,我就大概说一下吧!先来看偶安装的这个Dcoo中amxx.cfg各部分的参数:

// AMX MOD X 配置文件.
echo Executing AMX Mod X Configuration File

// 用户的默认权限,可以用此定义为普通的玩家也加上各种权限,相关权限请参考uers.ini文件的权限说明
这个就是玩家的默认权限,相关的权限在users.ini 中有设置
// AMX的远程登陆总密码(所有op都一样),首次配置时必须修改。
// setinfo信息会将密码保存在config.cfg文件里。(为了避免泄露密码,请在结束游戏后删除自己的config.cfg)
// (管理员登陆时请控制台里输入 setinfo _pw "管理员密码",或者直接写入自己的config.cfg文件中)
amx_password_field "_pw" 这个就是amx远程OP的密码,一定要改的,别和server.cfg中的密码混淆就行
// 服务器的记录模式选项
// 0 - 禁止权限登陆,所有的玩家都没有任何的权限
// 1 - 正常模式
// 2 - kick所有users.ini文件上无帐号的玩家
amx_mode 1 服务器的记录模式,一般默认就行了。
// 在op执行某个命令时是否显示op的行动
// 0 - 关闭
// 1 - 不显示OP的行动
// 2 - 显示OP的行动
amx_show_activity 2
// 服务器定时在下方滚动显示服务器信息,以秒为单位
amx_scrollmsg "欢迎来到 %hostname% -- 该服务器使用了 AMX Mod X 管理插件" 600
这里就是一些在游戏中看到的滚动的字的设置位置,可以多设置几条,但是要注意最后那里时间,不能相同,否则就只显示头一条!
// clanmod风格的服务器MOTD彩色信息,后面的颜色RGB代码可以自己修改
amx_imessage "欢迎来到 %hostname%" "000255100"
amx_imessage "这个服务器使用了 AMX Mod X 管理插件\n下载地址 http://www.amxmodx.org" "000100255"
这个就是在游戏中,时不时显示在屏幕中央的一些文字,注意是不滚动的哦!同样也可以多写几条,也要注意时间,最后那些 RGB代码 则是这里文字在游戏中显示的颜色,具体的代码我也不太了解,毕竟偶只对游戏有兴趣,偶又不是做设计一天和那些颜色打交道的。
// 信息显示的间隔时间,以秒为单位
amx_freq_imessage 180

// 这个选项聊天间隔时间的设置,防止server因聊天信息过多导致lag,以秒为单位)
amx_flood_time 0.75
// 预留的管理员通道数,没有权限的玩家进入此通道时会被kick(具体细节看插件原码)
amx_reservation 0
// 剩余时间显示的设置
// a - 以文本方式显示
// b - 用语音来提示
// c - 只使用语音,不显示文本
// d - 不显示详细的时间格式,仅用语音提示
// e - 如果时间小于现在的设置,用语音和文本进行提示
amx_time_display "ab 1200" "ab 600" "ab 300" "ab 180" "ab 60" "bcde 11"
// 当用户使用 "say thetime" 和 "say timeleft" 时使用语音通报
amx_time_voice 1
// 两个vote事件之间的最小延迟时间,以秒为单位。(为了防止恶意投票,请将间隔设置长些)
amx_vote_delay 10
// 一个VOTE事件持续的最长时间
amx_vote_time 10
// 显示玩家投票的选择结果
amx_vote_answers 1
// 投票成功所需要的百分比数(0.40为超过40%即投票成功,以此类推)
amx_votekick_ratio 0.40
amx_voteban_ratio 0.40
amx_votemap_ratio 0.40
amx_vote_ratio 0.02
// 最长可以延长正在游戏的地图的时间(好象是以分钟为单位)
amx_extendmap_max 90
// 每次默认延长15分钟
amx_extendmap_step 15
// 排行模式
// 0 - 昵称
// 1 - authid
// 2 - ip
csstats_rank 1
// 排行文件最大尺寸
csstats_maxsize 3500
// 显示HUD统计的持续时间
amx_statsx_ration 12.0
// HUD统计信息在冻结时间里的显示时长
// 如设为负数表示在冻结时间结束前多少秒清除HUD统计信息
amx_statsx_freeze -2.0
//设定为0时,将不允许客户端选择语言
amx_client_languages 1
// 插件调试模式
// 0 - 不调试
// 1 - 选择模式,在 plugins.ini 中需要调试的插件后加 debug
// 2 - 全部插件都在调试模式下
// 注意 - 调试模式下会影响 JIT (Just In Time)运行
amx_debug 1

基本就注意,因为这个文件本身已经带了详细的注解,偶有的解释还显得多余了呢!
现在来看看 users.ini 中的一些配置好了!

该文件和amxx.cfg在同一个目录下,目录中内容如下:

; 用户配置文件
; 文件位置: $moddir/addons/amxmodx/configs/users.ini
; 每行前的 ; 表示注释该行
; 权限标记:
; a - immunity (不能被 踢/封/处死/伤害 或者其他的命令影响)
; b - reservation (可通过预留通道加入服务器)
; c - amx_kick command (拥有KICK权限)
; d - amx_ban and amx_unban commands (拥有ban的权限)
; e - amx_slay and amx_slap commands (拥有强行杀死某人的权限)
; f - amx_map command (拥有更换地图的权限)
; g - amx_cvar command (可以设置amx的设置参数,但并不是所有的都可以)
; h - amx_cfg command (可以加载某个AMX的CFG设置文件权限)
; i - amx_chat and other chat commands (可以以管理员身份发布消息)
; j - amx_vote and other vote commands (可以发起一个投票事件)
; k - access to sv_password cvar (可以更改为服务器加密码)
; l - access to amx_rcon command and rcon_password cvar (by amx_cvar command)(可以用RCON命令来以OP身份登陆服务器)
; m - custom level A (自定义管理级别,为附加的其他插件预留的权限等级)
; n - custom level B
; o - custom level C
; p - custom level D
; q - custom level E
; r - custom level F
; s - custom level G
; t - custom level H
; u - menu access (拥有打开MENU管理菜单的权限)
; z - user (普通用户权限)
; 帐号类型:
; a - disconnect player on invalid password (此用户的id进入服务器时需要检测密码)
; b - clan tag (此用户的id带有战队标签)
; c - this is steamid/wonid (此用户*steamid/wonid进入服务器)
; d - this is ip (此用户*ip进入服务器)
; e - password is not checked (only name/ip/steamid needed)(此用户进入时不检查密码,只需要id或者ip或者steamid)
; 密码:
; 在自己的autoexec.cfg里加入: setinfo _pw "<管理员密码>"
; 此处 _pw 代表的是参数 amx_password_field 设定的密码
; 管理员帐号格式:
; <名字|ip|steamid> <管理员密码> <权限等级> <帐号类型>

热点内容
安卓实时更新图片的控件叫什么 发布:2025-07-29 19:58:10 浏览:271
python调用perl 发布:2025-07-29 19:49:13 浏览:781
angular路由缓存 发布:2025-07-29 19:47:32 浏览:535
安卓苹果怎么蓝牙互传视频 发布:2025-07-29 19:36:30 浏览:423
7z软件解压缩 发布:2025-07-29 19:23:49 浏览:727
华硕笔记本怎么设密码 发布:2025-07-29 19:22:23 浏览:793
安卓录音怎么使用 发布:2025-07-29 19:22:23 浏览:24
数据库封装库 发布:2025-07-29 19:22:21 浏览:414
千年脚本定制 发布:2025-07-29 19:19:56 浏览:942
pythonclass类 发布:2025-07-29 19:17:23 浏览:466