91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 647KB
    文件類型: .gz
    金幣: 1
    下載: 0 次
    發布日期: 2023-08-07
  • 語言: 其他
  • 標簽: 服務器類??

資源簡介

kangle web服務器 是一款跨平臺、功能強大、安全穩定、易操作的高性能web服務器和反向代 理服務器軟件。簡稱:kangle
kangle采用基于事件驅動(epoll等)加非阻塞socket及異步IO的方式構架,使其比傳統web服務器性能更高;靜態網頁處理能力達到Apache的8-10倍左右。
kangle支持isapi,fastcgi,cgi,ajp,uwsgi,fcgi,hmux,http等多種擴展接口,是一個非常開放的系統,非常方便的做負載均衡功能;
kangle內置內存/磁盤兩級緩存,采用LRU淘汰算法,緩存命中率非常高,有效降低資源占用
可以設置每個虛擬主機獨立進程,獨立身份運行(虛擬主機商的最愛,安全的實現虛擬主機功能);
企業版還帶有獨特的防CC攻擊和限制虛擬主機cpu的功能,自動監測動態網頁的訪問頻率,一但達到設定的閥值,自動對該網頁保護,kangle能區分攻擊訪問和正常訪問。一但某個虛擬主機的cpu超過設置,自動對該虛擬主機降低優先級。從而不影響其它虛擬主機。做到隔離攻擊。
獨有的命令擴展(虛擬化其它web服務器,使其它web服務器亦具有前述優點,

資源截圖

代碼片段和文件信息

/*
?*?api_child.cpp
?*?kangle?以子進程運行時和主進程通信的代碼
?*
?*??Created?on:?2010-7-9
?*??????Author:?keengo
?*/
#include?
#include?
#include?
#include?
//#include?“KApiRedirect.h“
#include?“KStream.h“
#include?“KFastcgiUtils.h“
#include?“KApiFetchobject.h“
#include?“KChildListen.h“
//#include?“KSelectorManager.h“

#include?“KThreadPool.h“
/////////[5]
#include?“api_child.h“
#include?“KChildApiService.h“
#include?“KApiDso.h“
#include?“api_child.h“
#include?“KListenPipeStream.h“
#include?“extworker.h“
std::map?processes;
std::map?apis;
int?api_child_key;
KListenPipeStream?ls;
#ifdef?_WIN32
HANDLE?api_child_token?=?NULL;
#endif
KMutex?processLock;
using?namespace?std;
KChildListen?*cl?=?NULL;
u_short?cur_api_id?=?1;
static?KMutex?lock;
void?restart_child_process(pid_t?pid)
{
bool?process_is_too_short?=?false;
processLock.Lock();
std::map::iterator?it?=?processes.find(pid);
if?(it!=processes.end())?{
if?(time(NULL)?-?(*it).second? process_is_too_short?=?true;
}
processes.erase(it);
}
processLock.Unlock();
#ifdef?_WIN32
CloseHandle(pid);
#endif
if?(process_is_too_short)?{
sleep(1);
}
if(program_quit){
return;
}
if(!::createProcess(&ls?NULL?argv?NULL?RDSTD_INPUT)){
????????????????debug(“cann‘t?create?process\n“);
????????????????return?;
????????}
????????pid?=?ls.process.stealPid();
processLock.Lock();
????????processes.insert(pair(pidtime(NULL)));
processLock.Unlock();
return;
}
/////////[6]
FUNC_TYPE?FUNC_CALL?api_listen_thread(void?*param)?{
KChildListen?*cl?=?(KChildListen?*)?param;
for?(;;)?{
cl->canRead();
}
KTHREAD_RETURN;
}
static?KApiDso?*getApiRedirect(u_short?id)?{
KApiDso?*rd?=?NULL;
std::map::iterator?it;
lock.Lock();
it?=?apis.find(id);
if?(it?!=?apis.end())?{
rd?=?(*it).second;
//rd->addRef();
}
lock.Unlock();
return?rd;
}
static?bool?loadApiRedirect(const?char?*pathu_short?id)?{

KApiDso?*rd?=?new?KApiDso;
rd->path?=?path;
if?(!rd->load())?{
delete?rd;
return?false;
}
lock.Lock();
apis[id]?=?rd;
lock.Unlock();
return?true;
}
static?bool?api_child_load(KStream?*st?char?*msgu_short?id?u_short?content_len)?{

FCGI_Header?header;
memset(&header?0?sizeof(header));
if(loadApiRedirect(msgid)){
header.id?=?0;
}?else?{
header.id?=?1;
}
header.type?=?API_CHILD_LOAD_RESULT;
return?st->write_all((char?*)?&header?sizeof(header))
==?STREAM_WRITE_SUCCESS;
}
#ifndef?_WIN32
static?bool?api_child_setuid(KPoolableStream?*st?char?*msg
u_short?content_len)?{
if?(content_len?!=?sizeof(api_child_t_uidgid))?{
return?false;
}
FCGI_Header?header;
memset(&header?0?sizeof(header));
api_child_t_uidgid?*body?=?(api_child_t_uidgid?*)?msg;
// bool?result?=?true;
if?(body->gid>0?&&?setgid(body->gid)?!=?0)?{
header.id?|=?2;
}
if?(body->uid>0?&&?setuid(body->uid)?!=?0)?{
header.id?|=?1;
}
header.type?=?API_CHILD_SETUID_RESULT;
if?(st->write_all((char?*

評論

共有 條評論