版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++基于Nginx作為反 和輕量級(jí)web服務(wù)分布式分布式簡(jiǎn)單的來(lái)說(shuō),就是將數(shù)據(jù)分散到多個(gè)設(shè)備(服務(wù)傳統(tǒng)的網(wǎng)絡(luò)系統(tǒng)采用集中的服務(wù)器存放所有數(shù)據(jù)服務(wù)模應(yīng)用的需要。分布式網(wǎng)絡(luò)系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)服務(wù)器分擔(dān)負(fù)荷,利用位置服務(wù)器定位信息,它不但提高了系統(tǒng)的可 FastDFS是一款開(kāi)源的、分布式文件系統(tǒng)(DistributedFileSystem),文件、文件同步、文件(文件上傳、文件、文件刪除)等,解決了大容量和負(fù)載均衡的問(wèn)題。FastDFS是通過(guò)純C實(shí)現(xiàn)支持Linux, BSD等Unix系統(tǒng)類FS,不是通用的文件系統(tǒng)只能夠通過(guò)專有API 目前提供了C,Java和PHPAPI為互聯(lián)網(wǎng)應(yīng)用量身定做,解決大容量文件問(wèn)題,追求高性能和高擴(kuò)展性FastDFS可以看做是基于文件的key-value存儲(chǔ)系統(tǒng),稱為分布式文件服務(wù)更為合適。 源碼 我們可以通過(guò)FastDFS對(duì)文件的上傳過(guò)程,來(lái)初步了解 發(fā)起對(duì)FastDFS的文件傳輸動(dòng)作,是通過(guò)連接到某一臺(tái)TrackerServer的指定端口來(lái)實(shí)現(xiàn)的; StorageServerStorageServer; 再通過(guò)這些信息連接到這臺(tái)StorageServer,將要上傳的文件傳送到給StorageServer上。 (tracker)和節(jié)(storage TrackerServer與StorageServer之間不直接通信,其基本的信息由多臺(tái)TrackerServer之間保證了Tracker的分布式,TrackerStorageServer是分成多個(gè)Group(組),每個(gè)Group中的Storage都是互相備份的,也就是說(shuō),如果Group1有Storage1、Storage2、Storage3,其容量分別是100GB、200GB、300GB,那么Group1的 能力是100GB,而不是300GB,這就是互相備進(jìn)一步說(shuō)整個(gè)Group的 能力由該組中該儲(chǔ)能力最小的Storage決定多個(gè)Group之間的方式可以采用roundrobi(輪訓(xùn))、loadbalanced(負(fù)載均衡)或指定Group的方式。另一點(diǎn)相對(duì)于MS(Master-Slave)模式的優(yōu)勢(shì),不僅master有上 與master之間可能會(huì)出瓶頸。但FastDFS架構(gòu)中,TrackerServer不會(huì)稱為系統(tǒng)瓶頸,數(shù)據(jù)最終是與一個(gè)available的StorageServer進(jìn)行傳輸?shù)?。GroupFastDFSFastDFSFastDFSFastDFS(FastDFS2.0之間版本)epolllibevent實(shí)現(xiàn)(libevent是一個(gè)用C語(yǔ)言編寫(xiě)的、輕量級(jí)的開(kāi)源高性能網(wǎng)絡(luò)庫(kù),但是版的FastDFS最終網(wǎng)絡(luò)IO這部分重新用epoll實(shí)現(xiàn)。FastDFS2.0libeventlibevent地址monmonFastDFS操作的基礎(chǔ)庫(kù),F(xiàn)astDFS沒(méi)有使用標(biāo)準(zhǔn)的庫(kù),而是封裝FastDFS相關(guān)的庫(kù)。mon的git地址 安裝:sudomake.sh ②sudoln-s ②sudoln-s/FastDFSFastDFS源代碼地址 mon是一樣的tartar-zxvffastdfs-sudo./make.sh確認(rèn)make/usr/binFastDFS先配置tracker,再添加一個(gè)storage,每添加添加一個(gè)storage,實(shí)際上是storage連接tracker,tracker必須存在,否則storage無(wú)法加進(jìn) 主要用于測(cè)試上傳、文件。如果有足夠多的機(jī)器或虛擬機(jī)(3臺(tái)或3臺(tái)以上),一臺(tái)作為tracker、一臺(tái)作為、多臺(tái)作為storage,當(dāng)然必須保證這幾臺(tái)機(jī)器網(wǎng)絡(luò)是可以通。如果嫌麻煩或者沒(méi)有這么多機(jī)器,一臺(tái)機(jī)器可以同時(shí)為tracker、 1)1)trackerstorage2)2)啟動(dòng)FastDFSstorage無(wú)法上傳、文件:上傳、文件測(cè) 所在的機(jī)器完成、刪除測(cè)試: #include#include"make_log.h"http://intmain(intargc,char{char*p= oLOG("test_log","test"testinfo[%s]",p);//return}內(nèi)存DDRIII1333redisredis是一個(gè)開(kāi)源的key-value系統(tǒng)。與memcached類似,redis將大部分?jǐn)?shù)據(jù)在內(nèi)存中。redis支持的數(shù)據(jù)類型包括:字符串、簡(jiǎn)單而言,redis基于內(nèi)存操作,讀寫(xiě)速度很快,100000讀寫(xiě)/秒,redisCLinux、BSDSolarisredis支持的客戶端語(yǔ)言也非常豐富,常用的計(jì)算機(jī)語(yǔ)言如C、C#、C++、Object-C、PHP、Python、Java、Perl、Lua、Erlang等均有可 redis服務(wù)器。當(dāng)前redis的應(yīng)用已經(jīng)非常廣泛,國(guó)內(nèi)像新浪、淘寶,國(guó)外像Flickr、 等均在使用redis的緩存redisredis是完全在內(nèi)存中保存數(shù)據(jù)的數(shù)據(jù)庫(kù),使用磁盤(pán)只是為了持redis可以將數(shù)據(jù)到任意數(shù)量的從服務(wù)器redis異??焖伲簉edis110000設(shè)置操作,81000個(gè)/每秒的操作。支持豐富的數(shù)據(jù)類型:redis支持最大多數(shù)開(kāi)發(fā)人員已經(jīng)知道如操作都是原子的:所有redis的操作都是原子(所謂原子操作,就是該操作絕不會(huì)在執(zhí)行完畢前被任何其他任務(wù)或打斷,也 redis服務(wù)器得到的是更新后的值(值)。如:緩存,消息傳遞隊(duì)列中使用(redis原生支持發(fā)布/訂閱),在應(yīng)用程序中,如:Web應(yīng)用程序會(huì)話、頁(yè)面點(diǎn)擊數(shù)等任何短redis1)取N個(gè)數(shù)據(jù)的操 的文章,我們可以將的5000條評(píng)論IDredis的List 榜應(yīng)用,取TOPN操sortedsetsortedsetscore,將具體的數(shù)據(jù)設(shè)置成相應(yīng)的value,每次只需要執(zhí)行一條ZADD命令比如你可以把上面說(shuō)到的ortedset的re值設(shè)置成過(guò)期時(shí)間的時(shí)間戳,那么就可以簡(jiǎn)單地通過(guò)過(guò)期時(shí)間排序,定時(shí)清除過(guò)期數(shù)據(jù)了,不僅是清除redis中的過(guò)期數(shù)據(jù),你完全可以把redis里這個(gè)過(guò)redis來(lái)找出哪些數(shù)據(jù)需要redis令都是原子性的,你可以輕松地利用INCR,DECR命令redisset使用listsortedset甚至可以構(gòu)建有優(yōu)先級(jí)最常用,性能優(yōu)于memcached(被libevent拖慢),數(shù)據(jù)結(jié)構(gòu)樣redis :redis解壓壓縮包:tarzxvfredis- 安裝:sudomake在啟動(dòng)redis服務(wù)器時(shí),我們可以為其指定一個(gè)配置文件,默認(rèn)情況下配置文件在redis的源碼 下,文件名為redis.conf(01_package\02_redis\redis.conf):追加模式(appendonlyLUA(lua慢日志(slow通知(eventredis配置文件參數(shù)說(shuō)明:01_package\02_redis\redis配置文件參數(shù)說(shuō) redisredisSortedSet String數(shù)據(jù)結(jié)構(gòu)是簡(jiǎn)單的key-value類型,value不僅可以是String,也可以是數(shù)字。Stringredis的String可以包含任何數(shù)據(jù),比如jpg或者序列化的對(duì)象。從內(nèi)部實(shí)現(xiàn)來(lái)看其實(shí)String可以看作byte數(shù)組,最大上限是1G字節(jié)。Stringstructstruct{{longlen; charbuf[];len是bufbuf是個(gè)charsetsetkeygetkeystringkeyvaluekeyKEYSpattern(正則表達(dá)式)EXISTSkey1DELkeyTYPE返回key所的value的數(shù)據(jù)結(jié)構(gòu)類型,它可以返回string,list,set,zset和hash等不同的類型。SETNXkey
keyvaluekeySET命key存在時(shí),什么也不做。nx是notexist的意思。SETEXSETEXkey keyvaluekeyseconds SETRANGEoffset
keystringoffset處開(kāi)始,覆蓋valueoffsetkeystring還要長(zhǎng),那這個(gè)string0以達(dá)到offset。INCRINCRDECR對(duì)key1key1MSETMSETkey MGETkey[key key的valueredis哈希是鍵值對(duì)的集合,它是是字符串字段和字符串值之間的映HSETkeyfieldvalueHGETkeyfieldHKEYSkey
設(shè)置keykey指定的哈希集中該字段所關(guān)聯(lián)的值。返回key指定的哈希集中所有字段的名字。HDELHDELkeyfield[fieldHLENkeykeyHMSETkeyfieldvalue[fieldvalue...]HMGETkeyfield[field
key指定的哈希集中指定字段的值。keykeyList說(shuō)白了就是鏈表(雙端鏈表)List結(jié)構(gòu),我們可以輕松地實(shí)現(xiàn)消息等功能(比如的TimeLine)。List的另一個(gè)應(yīng)用就是消息隊(duì)列,可以利用List的PUSH操作,將任務(wù)存在List中,然后工作線程再用POP操作將任務(wù)取出進(jìn)行執(zhí)行。LPUSHkeyvalue[valuekeyLPOPkeylistLRANGEkeystart返回在key的列表里指定范圍內(nèi)的元素LTRIMkeystart修剪(trim)listlist就會(huì)只包含指定Set是字符串的無(wú)序集合,集合指一堆不重復(fù)值的組合。利用Redis提供的Set數(shù)據(jù)結(jié)構(gòu),可以一些集合性的數(shù)據(jù)。比如在 絲存在一個(gè)集合。因?yàn)镽edis非常人性化的為集合提供了求交集、同令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中。SADDkeymember[member...]SMEMBERSkeySREMkeymember[member
memberkey中。key集合所有的元素。keySINTERSINTERkey[keykey1key1={a,b,c,d}key2={c}key3=SINTERkey1key2key3=SUNIONSTORESUNIONSTOREdestination[keySortedSet—和Sets相比,SortedSets是將Set中的元素增加了一個(gè)權(quán)重參數(shù)score,使得集合中的元素能夠按score進(jìn)行有序排列,比如一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的SortedSets,其集合value可以是同學(xué)的學(xué)號(hào),而score就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時(shí)候,就已經(jīng)進(jìn)行了天然的排序。另外還可以用SortedSets來(lái)做帶權(quán)重的隊(duì)列,比如普通消息的score1score2,然后工作線程可以選擇按score的倒序來(lái)獲取工作任務(wù),讓重要的任務(wù)優(yōu)先ZADDkeyscoremember[scoremember...]key有序集合(sortedset)里面。添加時(shí)可以指定多個(gè)分?jǐn)?shù)/成員(score/member)ZRANGEkeystartstopkey中,指定區(qū)間內(nèi)的成員。其中成員的位置score值遞減(從小到大)來(lái)排列。ZREVRANGEkeystartstopkey中,指定區(qū)間內(nèi)的成員。其中成員的位置score值遞減(從大到小)來(lái)排列。Pub/Sub從字面上理解就是發(fā)布(Publish)與訂閱(Subscribe)。發(fā)件人(在Redis中的術(shù)語(yǔ)稱為發(fā)布者)發(fā)送郵件,而 們。信息傳輸?shù)逆溌贩Q為通道。Redis一個(gè)客戶端可以訂閱任意數(shù)在Redis中,你可以設(shè)定對(duì)某一個(gè)key值進(jìn)行消息發(fā)布及消息訂閱,當(dāng)一個(gè)key值上進(jìn)行了消息發(fā)布后,所有訂閱它的客戶端都會(huì) SUBSCRIBEchannel[channel...]PUBLISHchannelmessage
messagechannel Redis事務(wù)中的執(zhí)行過(guò)程中而另一客戶機(jī)發(fā)出的請(qǐng)求,這是不可redis事務(wù)是原子的。原子意味著要么所有令都執(zhí)行,要么redis事務(wù)由指令MULTI發(fā)起的,之后傳遞需要在事務(wù)中和整個(gè)事務(wù)中,最后由EXEC命令執(zhí)行所有命令的列表。EXECredis客戶端敲save命令,即可創(chuàng)建當(dāng)前redis數(shù)據(jù)庫(kù)的備份,如果成 生成dump.rdb文件??墒褂肅ONFIG命令查看redis服務(wù)器啟動(dòng) dump.rdb文件為redis在dump.rdb文件所在 下,啟動(dòng)redis服務(wù)器,服務(wù)器自動(dòng)會(huì)加 下的dump.rdb文件:RDB方式(默認(rèn)RDB方式的持久化是通過(guò)快照(snapshotting)完成的,當(dāng)符合一定條件時(shí)redis會(huì)自動(dòng)將內(nèi)存中的所有數(shù)據(jù)進(jìn)行快照并在硬盤(pán)上。進(jìn)save可以通過(guò)配置dir和dbfilename兩個(gè)參數(shù)分別指定快照文件的 redis使用fork函數(shù)一份當(dāng)前進(jìn)程(父進(jìn)程)的副本(子進(jìn)程),父進(jìn)程繼續(xù)接收并處理客戶端發(fā)來(lái)令,而子進(jìn)程開(kāi)始將內(nèi)存中的時(shí)文件替換舊的RDB文件,至此一次快照操作完成。在執(zhí)行fork的時(shí)候操作系統(tǒng)(類Unix操作系統(tǒng))會(huì)使用寫(xiě)時(shí)(copy-on-write)策略,即fork函數(shù)發(fā)生的一刻父子進(jìn)程共享同一內(nèi)存數(shù)據(jù),當(dāng)父進(jìn)程據(jù)一份以保證子進(jìn)程的數(shù)據(jù)不受影響,所以新的RDB文件的是執(zhí)行fork一刻的內(nèi)存數(shù)據(jù)。redis在進(jìn)行快照的過(guò)程中不會(huì)修改RDB文件,只有快照結(jié)束后才會(huì)將舊的文件替換成新的,也就是說(shuō)任何時(shí)候RDB文件都是完整的。這使得我們可以通過(guò)定時(shí)備份RDB文件來(lái)實(shí)現(xiàn)redis數(shù)據(jù)庫(kù)備份。RDB文件是經(jīng)過(guò)壓縮(可以配置 pression參數(shù)以禁用壓縮節(jié)省CPU占用)的二進(jìn)制格式,所以占用的空間會(huì)小于內(nèi)存中的數(shù)SAVE或BGSAVEredis執(zhí)行快照,兩個(gè)命令的區(qū)別在于,前者是由主進(jìn)程進(jìn)行快照操作,會(huì)阻塞住其他請(qǐng)求,后者會(huì)通過(guò)fork子進(jìn)程進(jìn)行快照操作。redis啟動(dòng)后會(huì)RDB快照文件,將數(shù)據(jù)從硬盤(pán)載入到內(nèi)存。根1GB的快照文件載入到內(nèi)存中需要花費(fèi)20~30秒鐘。RDBredis異常退出,就會(huì)丟失最后一則可以考慮使用AOF方式進(jìn)行持久化。AOFredisAOF(appendonlyfile)方式的持久化,可redis.conf(01_package\02_redis\redis.conf)appendonly參開(kāi)啟AOF持久化后每執(zhí)行一條會(huì)更改redis中的數(shù)據(jù)令,redisAOF文件中令來(lái)將硬盤(pán)中的數(shù)據(jù)載入到內(nèi)存中,載入的速度相較RDB會(huì)慢一些。AOF文件的保存位置和RDB文件的位置相同,都是通過(guò)dir參數(shù)appendonly.aofappendfilenameredisAOFredis ark--p6379-q-d100個(gè)并發(fā)連接,100000個(gè)請(qǐng)求,檢測(cè)host為localhost端口為6379redis服務(wù)器性能:redis-benarkhp6379c100-n100000redis 安裝:sudomake 下,有一個(gè)examples的 API說(shuō)明:redisContextredisContext*redisConnect(constchar*ip,int成功:連接句柄voidvoidmand(redisContext*c,constchar*format,c剩下的參數(shù):剩下的參數(shù)為變參就如C標(biāo)準(zhǔn)函數(shù)printf函數(shù)一樣的變參成功:void*,一般強(qiáng)制轉(zhuǎn)換成為redisReply/*/*ThisisthereplyobjectreturnedbytypedefstructredisReply{inttype;/*REDIS_REPLY_*mand()longlonginteger;/*TheintegerwhentypeisREDIS_REPLY_INTEGER*/size_tlen;/*Lengthofstring*/char*str;/*UsedforbothREDIS_REPLY_ERRORandREDIS_REPLY_STRING*/size_telements;/*numberofelements,forREDIS_REPLY_ARRAY*/structredisReply**element;/*elementsvectorforREDIS_REPLY_ARRAY}redisReply中typestrlenstr,lenintegerstr,lenelements的值(數(shù)組個(gè)數(shù)),通過(guò)element[index]的方式數(shù)組元素,每個(gè)數(shù)組元素是一個(gè)redisReply對(duì)象的指針。 ReplyObject(void IO讀/errnoIO讀/errno查看原因redisvoidvoid(redisContext文件中完成#include<stdio.h>#include#include<stdio.h>#include<stdlib.h>#include#include#include#includeintmain(intargc,char{intret=redisContext*conn=conn=rop_connectdb_nopwd("",//setoret=rop_set_string(conn,"foo"," if(ret==0){printf("set}{printf("set}charvalue[256]={0ret=rop_get_string(conn,"foo",value);if(ret==0){printf("getsucc:%s-%s\n","foo",}{printf("get}return}ubuntusudoapt-getsudoapt-getinstallmysql-serversudoapt-getinstallmysql-sudoapt-getinstall sudosudonetstat-tap|grepMySQLsocket處于MySQLmysqladmin-urootmysqladmin-uroot-p停止sudosudoservicemysql啟動(dòng)sudosudoservicemysql重啟sudosudo/etc/init.d/mysqlmysql-urootmysql-uroot--u-p表示登陸的用戶上面命令輸入之后會(huì)提示輸入,此時(shí)輸入就可以登錄mysql,然后通過(guò)showdatabases;默認(rèn)情況下,MySQLubuntu配置說(shuō)明:01_package\03_mysql\mysql遠(yuǎn)MySQLwindows 登錄數(shù)據(jù)庫(kù),需要開(kāi)啟服務(wù)器下的MySQL權(quán) f,用vim編輯 f里面的bind-address=將其注釋rootMySQLgrantgrantallon*.*tousername@'%'identifiedby最后刷新一下。執(zhí)行:flushprivileges; 用剛才創(chuàng)建的用戶和登陸MySQLwindows其它版本ubuntu配置說(shuō)明:01_package\03_mysql\其它版本mysql遠(yuǎn) 重啟mysql:sudo/etc/init.d/mysqlrestart4)查看字符集:showvariableslike'%char%';mysql_query(conn,setnamesutf8");mysql_query(conn,setnamesutf8");redismysql數(shù)據(jù)庫(kù)有個(gè)共享文件信息表,所 語(yǔ)句主要要實(shí)現(xiàn)共享文件榜顯示功能由于此數(shù)據(jù)為熱點(diǎn)數(shù)(用戶經(jīng)常,信息數(shù)據(jù)保存在redis提高效率。mysql和redis如果不相等,清空redis數(shù)據(jù),重新從mysql中導(dǎo)入數(shù)據(jù)到redis(mysql和redis交互)從redis數(shù)據(jù),保存json格式,打redis所需key值| 戶文件有序集合| 戶文件有序集合| | md5|redis ZADDkeyscoremember ZREMkeymember ZREVRANGEkeystartstop[WITHSCORES] ZINCRBYkeyincrementmember ZCARDkeykey ZSCOREkeymember ZREMRANGEBYRANKkeystartstop zlexcountzset[member[member1,不存在0`#define|文件標(biāo)示和文件名對(duì)應(yīng)表| | file_id(md5|value:|redis hsetkeyfield hgetkey`#define {{[{"filename":"2.jpg", {"filename":"1.jpg", {"filename": {"filename":"ChrisMedina-Whatarewords.mp3", {"filename":"TamasWells-ValderFields.mp3", }]}HTTPWWW是WorldWideWeb Web服務(wù)器(也稱WWW服務(wù)器)一般指 WebApache、Nginx、IIS。一些使用C/C++開(kāi)發(fā)的開(kāi)源的http服務(wù)器列表在這里:WebHTTP(超文本傳輸協(xié)議)與客戶機(jī)瀏覽器進(jìn)行信HTTP HTTPTCPTLSSSL協(xié)議層之上,這個(gè)時(shí)候,就成了我們常說(shuō)的HTTPS。如下圖所示:C/SHTTPSHTTPS(全稱:HyperTextTransferProtocoloverSecureSocketLayerHTTP下加入SSL層,HTTPSSSL,因此加密的詳細(xì)內(nèi)容就需要SSL。超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和 傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù) 者截取了Web瀏覽器和 文,就可以直接讀懂其中的信息,因此HTTP協(xié)議不適合傳輸一些 號(hào)、等。為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩琀TTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠來(lái)驗(yàn)證服務(wù)器的身HTTP一樣)HTTPSHTTPS和HTTPhttps協(xié)議需要到ca申 http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議。httphttps使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議URLUniqueResourceLocation,用來(lái)表示網(wǎng)絡(luò)資源,可以理URL的長(zhǎng)度有限制,不同的服務(wù)器的限制值不太相同,但是不能無(wú)HTTPintint{intsockfd=socket(AF_INET,SOCK_STREAM,structsockaddr_inmy_addr;bzero(&my_addr,sizeof(my_addr)); //清空my_addr.sin_family=AF_INET; //ipv4my_addr.sin_port=htons(8000); //端口my_addr.sin_addr.s_addr=htonl(INADDR_ANY);////interr_log=bind(sockfd,(structsockaddr*)&my_addr,sizeof(my_addr));if(err_log!=0){return-1;}listen(sockfd,10);,@port=%d...\n",intconnfdaccept(sockfd,NULL //charbuf[8*1024]={0};read(connfd,buf,sizeof(buf));printf("%s",buf);while{}}return}urlHTTP4個(gè)部分組請(qǐng)求行由方法字段、URL字段和HTTP協(xié)議版本字段3個(gè)部分組成,他們之間使用空格隔開(kāi)。常用的HTTP請(qǐng)求方法有GET、當(dāng)客戶端要從服務(wù)器中某個(gè)資源時(shí),使用GET方法。GETURL定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,使用GET方法時(shí),請(qǐng)求參數(shù)和對(duì)應(yīng)的值附加在URL后面,利用一個(gè)問(wèn)號(hào)(“?”)URL的結(jié)尾與請(qǐng)求參數(shù)的開(kāi)始,傳遞參數(shù)長(zhǎng)度受限制,因此GET方法不適合用于上傳數(shù)據(jù)。通過(guò)GET方法來(lái)獲取網(wǎng)頁(yè)時(shí),參數(shù)會(huì)顯示在瀏覽器地址欄上,GETGET/Host:Host:User-Agent:Mozilla/5.0(X11;Ubuntu;Linuxx86_64;Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:en-US,en;q=0.5Accept-Encoding:gzip,當(dāng)客戶端給服務(wù)器提供信息較多時(shí)可以使用POST方法,POSTGET一般用于獲取/查詢資源信息,POST會(huì)附帶用戶數(shù)據(jù),一般用于更新資源信息。POSTHTTP請(qǐng)求數(shù)據(jù)中,而且長(zhǎng)度沒(méi)有限制,因?yàn)镻OST攜帶的數(shù)據(jù),在HTTPPOSTPOST/searchAccept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-excel,application/vnd.ms-Referer:Referer:<aAccept-Encoding:gzip,User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR2.0.50727;TheWorld)Host:<a:客戶端可識(shí)別的響應(yīng)內(nèi)容類型列表,星號(hào)“*”用于按范圍將類型分組,用*/*指示可接受全部類型,用type/*type類請(qǐng)求的主機(jī)名,允許多個(gè)同處一個(gè)IP地址,即虛擬主機(jī)連接方式(closekeepalive)于客戶端擴(kuò)展字段,向同一的服務(wù)端發(fā)送屬于該域GETPOSTPOST方法適用于需要客戶填寫(xiě)表單的場(chǎng)合。與請(qǐng)求包體相關(guān)的最常使用的是包體類型Content-Type和包體長(zhǎng)度Content-Length。啟動(dòng)nginx intint{intsockfd=socket(AF_INET,SOCK_STREAM,structsockaddr_inbzero(&server_addr,sizeof(server_addr));//初始化服務(wù)器地址server_addr.sin_family=AF_INET; //IPv4server_addr.sin_port=htons(80);//nginx服務(wù)器 , 服務(wù)器connect(sockfd,(structsockaddr*)&server_addr,charsend_buf"GET/test.html"Accept:image/gif,image/jpeg,image/pjpeg,application/x-ms-application,application/xaml+xml,application/x-ms-xbap,*/*\r\n" "User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT10.0;WOW64;Trident/7.0;.NET4.0C;.NET4.0E;.NETCLR2.0.50727;.NETCLR3.0.30729;.NETCLR"Accept-Encoding:gzip,deflate\r\n""Host:09:8000\r\n""Connection:Keep-Alive\r\n"send(sockfd,send_buf,sizeof(send_buf)-1,charrecv_buf[8*1024]={0};recv(sockfd,recv_buf,sizeof(recv_buf),0);printf("%s",recv_buf);returnreturn}urltest.html HTTP4個(gè)部分組狀態(tài)行由HTTP3個(gè)部表示客戶端的請(qǐng)求有內(nèi)200400Bad401403404Not500InternalServerError503ServerUnavailableLocationServer在服務(wù)器方面,使用Web服務(wù)器,采用HTTP協(xié)議來(lái)代替底層的socketHTTP協(xié)議更加除了能得到穩(wěn)定的服務(wù)intint{intsockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){return-1;}structsockaddr_inmy_addr;bzero(&my_addr,sizeof(my_addr)); //清空my_addr.sin_family=AF_INET; //ipv4my_addr.sin_port=htons(8000); //端口my_addr.sin_addr.s_addr=htonl(INADDR_ANY);////interr_log=bind(sockfd,(structsockaddr*)&my_addr,sizeof(my_addr));if(err_log!=0){return-1;}listen(sockfd,10);//,套接字改printf("listen@port=%d...\n",intconnfdaccept(sockfd,NULL //charrecv_buf[8*1024]={0};read(connfd,recv_buf,sizeof(recv_buf));printf("%s",recv_buf);charfilename[200]={0};sscanf(recv_buf,"GET/%[^filename);獲取文件名字printf("filename=%s\n",filename);intfdopen(filename,O_RDONLY);//只讀方式打開(kāi)if(fd<0)//打開(kāi)文件失敗{charerr[]="HTTP/1.1404NotFound\r\n"http://狀態(tài)行"Content-Type:text/html\r\n" //"<HTML><BODY>Filenotfound</BODY></HTML>";//send(connfd,errstrlen(err0);//return-1;}charhead[]="HTTP/1.1200OK\r\n"http://狀態(tài)行"Content-Type:text/html\r\n" send(connfd,head,strlen(head),0);intlen;charfile_buf[4*while((len=read(fd,file_buf,sizeof(file_buf)))>{send(connfd,file_buf,len,}while{}return}NginxNginx是一款輕量級(jí)的Web服務(wù)器、反 服務(wù)器,并在一個(gè)BSD-like協(xié)議 由俄羅斯的程序設(shè)計(jì)師IgorSysoev所開(kāi)發(fā),供大型的及搜索引擎Rambler(俄文:Рамблер)使用。nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,陸使用nginx用戶有:、京東、新浪、網(wǎng)易、騰訊、淘寶等。NetcraftNetcraft公司于1994年底在英國(guó)成立,多年來(lái)一直致力于互聯(lián)網(wǎng)市場(chǎng)以及安全方面的咨詢服務(wù),其中在國(guó)際上最具 服務(wù)器,解析/主機(jī)提供商,以及SSL市場(chǎng)所做的公司官網(wǎng)每月公布的調(diào)研數(shù)據(jù)(WebServerSurvey)已成為人 常被諸如華爾街,英國(guó)BBC,Slashdot等或 Nginx時(shí))Nginx可 workerworker一般情況下,10000HTTPKeep-AliveNginx中僅消耗2.5M內(nèi)存,這是Nginx支持高并發(fā)的基礎(chǔ)。10萬(wàn)以上的并發(fā)連接取決于內(nèi)存,10萬(wàn)遠(yuǎn)未封頂。master和worker的分離設(shè)計(jì),可實(shí)現(xiàn)7x24小時(shí)不間斷服務(wù)的前提Nginx可執(zhí)行文件,當(dāng)然也支持更新配置項(xiàng)和日志文件。最自由的 NginxNginx源碼,然后再發(fā)布。這吸引了無(wú)數(shù)的開(kāi)發(fā)者繼續(xù)為Nginx貢獻(xiàn)智慧。NginxNginx包的Nginx文檔淘寶團(tuán)隊(duì)翻譯文檔 Nginx開(kāi)發(fā) Nginx的常用功能,那么首先需要確保該操作系統(tǒng)上至ubuntu平臺(tái)安裝指令sudoapt-getinstallgccsudosudoapt-getinstallgccsudoapt-getinstallg++sudoapt-getinstallbuild-sudoapt-getinstallcentos平臺(tái)安裝指令yumyum-yinstallgccautomakeautoconflibtoolyuminstallgccgcc-PCREPCRE(PerlCompatibleRegularExpressions中文含義:perl語(yǔ)言兼容正則表達(dá)式)是一個(gè)用C語(yǔ)言編寫(xiě)的正則表達(dá)式函數(shù)庫(kù),由.海澤(PhilipHazel)編寫(xiě)。PCRE是一個(gè)輕量級(jí)的函數(shù)庫(kù),比Boost之類的正則表達(dá)式庫(kù)小得多。PCREPOSIX正則Nginx配置文件nginx.conf里使用了正則表達(dá)式,所以編譯PCRENginxNginx的HTTP模塊要靠它PCRE庫(kù)源碼包地址 tartar-zxvfpcre-cdpcre-sudomakezlibzlib是提供數(shù)據(jù)壓縮用的函式庫(kù),zlibgzip數(shù)據(jù)頭,zlibNginx配置文件nginx.conf配置了gzipon,并指定了某些類型(content-type)的HTTP響應(yīng)使用gzip來(lái)進(jìn)行壓縮以減少網(wǎng)絡(luò)傳輸量,所以編譯時(shí)必須把zlib庫(kù)編譯進(jìn)Nginx。zlib源碼包地址zlib源碼包本 編譯和安裝zlib庫(kù)相關(guān)命令:tartar-zxvfzlib-cdzlib-sudomakeOpenSSLOpenSSL是一個(gè)接字層庫(kù),囊括主要的算法、常用的密鑰和封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供SSL是SecureSocketsLayer(接層協(xié)議)的縮寫(xiě),可以在Internet上提供性傳輸。Netscape公司在推出第一個(gè)Web瀏覽器的同時(shí),提出了SSL協(xié)議標(biāo)準(zhǔn)。其目標(biāo)是保證兩個(gè)應(yīng)用間通信的保Internet上通訊的工業(yè)標(biāo)準(zhǔn)。OpenSSL源碼包地址OpenSSL源碼包本 tartar-zxvfopenssl-cdopenssl-sudomakeNginx源碼包地址編譯和安裝Nginx相關(guān)命令:tartar-zxvfnginx-cdnginx-sudomake 其中,其中Nginx的配置文件存放于conf/nginx.conf,bin文件是位于sbin 下的nginx文件。Nginxsudosudo eto則表示Nginxsudosudo/usr/local/nginx/sbin/nginx-csudosudo/usr/local/nginx/sbin/nginx-ssudosudo/usr/local/nginx/sbin/nginx-s當(dāng)快速停止服務(wù)時(shí),workermaster進(jìn)程在收到信號(hào)立即 QUITmaster進(jìn)程來(lái)停止服務(wù),其效果與執(zhí)行-squit命令時(shí)一樣的:sudosudokill-sSIGQUITWINCHworkersudosudokill-sSIGWINCHsudosudo/usr/local/nginx/sbin/nginx-s或者sudokillsSIGHUP Nginx 下的 由于除主配置文件nginx.conf以外的文件都是在某些情況下才使用的,在nginx.conf中,包含若干配置項(xiàng)。每個(gè)配置 數(shù)2個(gè)部分構(gòu)指令的參數(shù)使用一個(gè)或者多個(gè)空格或者TAB字符與指令分開(kāi)。指令TOKEN串分為簡(jiǎn)單字符串或者是復(fù)合配置塊。復(fù)合配置塊即是由大error_pageerror_page500502503504多個(gè)TOKEN串的一般都是簡(jiǎn)單TOKEN串放面復(fù)合配置塊一般位于最后,locationlocation/root/home/jizhao/nginx-book/build/html;indexindex.htmlindex.htm;}nginx.conf中的配置信息,根據(jù)其邏輯上的意義對(duì)其進(jìn)行分類,可以Nginx在運(yùn)行時(shí)與具體業(yè)務(wù)功能無(wú)關(guān)的參數(shù),比如工作進(jìn)程數(shù)、運(yùn)行httpkeepalive、gziphttpserver配置項(xiàng),配置項(xiàng)httpURL實(shí) 相關(guān)的SMTP/IMAP/POP3時(shí),共享的一些配置通常httpmailmain上下文里的。在一服務(wù),支持了多個(gè)虛擬主機(jī),那么在http上下文里,就會(huì)出現(xiàn)多個(gè)server上下文。usernobody;worker_processes1;error_logusernobody;worker_processes1;error_loglogs/error.loginfo;events{}httpserverlistenlocation/indexroot }}serverlistenlocation/indexroot }}}mailmailauth_httppop3_capabilities"TOP""USER";imap_capabilities"IMAP4rev1""UIDPLUS";serverlisten110;protocolpop3;}serverlisten25;protocolsmtp;smtp_authx}} 青樓 web服務(wù)老鴇 服務(wù)器來(lái)接受internet上器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí) 一般情況下,Nginx端抗負(fù)載和處理靜態(tài)頁(yè)面請(qǐng)求,后端服務(wù)Apache、Tomcat、IISWeb服務(wù) 處理客戶端請(qǐng)求的是后端服務(wù)器1和后端服務(wù)器2。通用網(wǎng)關(guān)接口(CommonGatewayInterface、CGI)描述了客戶端和服CGI獨(dú)立于任何語(yǔ)言的,CGI程序可以用任何語(yǔ)言或者是完全 script、Python、Ruby、PHP、perl、Tcl、C/C++和VisualBasic都可以用來(lái)編寫(xiě)CGI程序。最初,CGI是在1993年 NCSAHTTPdWeb器開(kāi)發(fā)的。這個(gè)Web服務(wù)器使用了UNIXs Web服務(wù)器傳遞出去的參數(shù),然后生成一個(gè)運(yùn)行CGI的獨(dú)立的進(jìn)CGICGI進(jìn)程啟動(dòng)解析器、加載配置(如業(yè)務(wù)相關(guān)配置)、連接其它服CGIweb服務(wù)webCGIHttpResponse返回給客戶端,并殺死CGI進(jìn)程webCGI通過(guò)環(huán)境變量、標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤CGICGI子進(jìn)程處理請(qǐng)求,處理完事退CGI方式是客戶端有多少個(gè)請(qǐng)求,就開(kāi)辟多少個(gè)子進(jìn)程,每個(gè)子始化工作,這是CGI進(jìn)程性能低下的主要原因。當(dāng)用戶請(qǐng)求非常多的時(shí)候,會(huì)占用大量的內(nèi)存、cpu等資源,造能低下。CGIWeb服務(wù)器之間交互成為可能。CGI程序運(yùn)行在Web請(qǐng)求建立一個(gè)進(jìn)程,這種方法非常容CGICGIbytes或字元數(shù)來(lái)MIMECGIContent-types,HTTPAcceptheader定義CGICGI程序的請(qǐng)求參數(shù),也就是用"?"host名稱IP位址CGI程序所在的虛擬路徑,如/cgi-bin/echoserver的hostIP地址requestserverserver因此后來(lái)又發(fā)展出另外法:POST,也就是利用I/O重新導(dǎo)向的技巧,讓CGI程序可以由stdin和stdout直接跟瀏覽器溝通。當(dāng)我們指定用這種方法傳遞請(qǐng)求的數(shù)據(jù)時(shí),web服務(wù)器收到數(shù)據(jù)后CONTENT_LENGTH這個(gè)環(huán)境變量,然后調(diào)用CGI程序并將CGI程序的stdin指向這塊緩沖區(qū),于是我們就可以很順利的通過(guò)stdinCONTENT_LENGTH得到所有的信息,再?zèng)]有信快速通用網(wǎng)關(guān)接口(FastCommonGatewayInterface/FastCGI)是通用FastCGI致力于減少Web服務(wù)器與CGI程式之間互動(dòng)的開(kāi)銷,從而使服務(wù)器可以同時(shí)處理的Web請(qǐng)求。與為每個(gè)請(qǐng)求創(chuàng)建一個(gè)新的進(jìn)程不同,F(xiàn)astCGI使用持續(xù)的進(jìn)程來(lái)處理一連串的請(qǐng)求。這些進(jìn)FastCGI進(jìn)程管理器管理,而不是web服務(wù)器。FastCGIWeb服務(wù)器啟動(dòng)時(shí)載入初始化FastCGI執(zhí)行環(huán)境。例如IIS、ISAPI、apachemod_fastcgi、nginxngx_http_fastcgi_module、lighttpdmod_fastcgi。FastCGICGI解釋器進(jìn)程WebFastCGI進(jìn)程時(shí),可以配置以ip和UNIX域socket兩種方式啟動(dòng)。當(dāng)客戶端請(qǐng)求到達(dá)Web服務(wù)器時(shí),Web服務(wù)器將請(qǐng)求采socketFastCGI主進(jìn)程,F(xiàn)astCGI主進(jìn)程選擇并連接到一個(gè)CGI解釋器。Web服務(wù)器將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程。FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一socketWebFastCGI子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求FastCGIWeb服務(wù)器的下一個(gè)由于FastCGI程序并不需要不斷的產(chǎn)生新進(jìn)程,可以大大降低服務(wù)CGI技術(shù)提高5倍以上。它還支持分布式的部署,即FastCGIwebCGI是所謂的短生存期應(yīng)用程序,F(xiàn)astCGI是所謂的長(zhǎng)生存期應(yīng)用像是一個(gè)常駐(long-live)CGI,它可以一直執(zhí)行著,不會(huì)每次都要花費(fèi)時(shí)間去fork一次(這是CGIfork-and-execute模式)spawn-Nginx不能像Apache那樣直接執(zhí)行外部可執(zhí)行程序,但Nginx可以 服務(wù)器,將請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器,這也是Nginx的主要作用之一。其中Nginx就支持FastCGI 然后將請(qǐng)求轉(zhuǎn)發(fā)給后端FastCGI進(jìn)程。由于FastCGI進(jìn)FastCGI進(jìn)程管理器管理,而不是Nginx。這樣就需要一個(gè)FastCGI進(jìn)程管理器,管理我們編寫(xiě)FastCGI程序。spawn-fcgiFastCGI進(jìn)程管理器,簡(jiǎn)單小巧,原先是屬于lighttpd的一部分,后來(lái)由于使用比較廣泛,所以就遷移出來(lái)作為spawn-fcgi使用pre-fork模型,功能主要是打開(kāi)端口,綁定地spawn-fcgi源碼包地址spawn-fcgi源碼包本 tartar-zxvfspawn-fcgi-sudomake./autogen.sh:./autogen.sh:x:autoreconf:not因?yàn)闆](méi)有安裝automake工具,ubuntu用下面令安裝即可sudosudoapt-getinstallautoconfautomakespawn-fcgimanspawn-fcgispawn-fcgih獲fFastCGI-a-p-s綁定到unix-CFastCGI5(-PPID-FFastCGI的進(jìn)程數(shù)(CCGI用這個(gè)-u和-g使用什么(-u用戶、-g用戶組)運(yùn)行,CentOS下可apache用戶,其他的根據(jù)情況配置,如nobody、www-data等C/C++FastCGIFastCGI軟件開(kāi)發(fā)套件或者其它開(kāi)發(fā)框架,如fcgi。fcgi源碼包地址:http://w fcgi tar-zxvffcgi-2.4.1- cdfcgi-2.4.1-/sudomake#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include"fcgi_stdio.h"intmain(intargc,char{intcount=//while(FCGI_Accept()>={printf("Content-type:text/html\r\n");printf("<title>FastCGI printf("<h1>FastCGI printf("Requestnumber%drunningonhost<i>%s</i>\n",++count,}return}}spawn-fcgi-a-p8001-fspawn-fcgi-a-p8001-fNginxfcgi## location/testfastcgi_pass:8001;fastcgi_indextest;include}spawn-fcgi管理echo程序location/echolocation/echofastcgi_pass:8002;fastcgi_indexecho;include}重新啟動(dòng)nginxFastDFSNginxNginx的模塊,因?yàn)閷?duì)于互聯(lián)網(wǎng)靜態(tài)資源,一般是通過(guò)HTTP的,此時(shí)通過(guò)容易擴(kuò)展的 文件的上傳和變得特別簡(jiǎn)單Nginx安裝FastDFS模塊,主要是安裝在FastDFS的服務(wù)(storage)上,而不是tracker 目的實(shí)際是為了,當(dāng)輸入地址(09NginxFastDFStracker、storage和 NginxFastDFS模塊包:tarxzvffastdfs-nginx-cdfastdfs-nginx-module/會(huì)發(fā)現(xiàn)里面有個(gè)INSTALL和src 個(gè)不需要make而是需要重新編譯一下storage的Nginx模塊。NginxFastDFScdcdnginx-其中/usr/local/src/fastdfs-nginx-module/srcfastdfs模塊的絕對(duì)路徑,就是在編譯Nginx時(shí)候,連同這個(gè)模塊一起編譯:sudomakeNginx是會(huì)想/usr/local/include/fastdfs/去找,而不是去 mon/兩個(gè)文件夾拷貝到/usr/local/include/下即sudosudocp/usr/include/fastdfs//usr/local/include/-sudocpmon//usr/local/include/-fastdfs-nginx-modulefastdfs-nginx-module將base_pathbase_pathusrfastdfsstorage跟storage.conftracker_server=02:22122#tracker服務(wù)器的IP地址以及 storage_server_port23000#storagegroup_namegroup1當(dāng)前服務(wù)器的group名,確保跟storage.confurl_have_group_name=store_path_count=1store_path0usrfastdfsfastdfs0 路徑跟storage.confgroup_count1設(shè)置組的個(gè)數(shù)group_name=group1storage_server_port=23000store_path_count=store_path0=/usr/fastdfs/##如果group_count2,那就再配置一個(gè)(這里不需要sudosudoln-s/usr/fastdfs/fastdfs0/datalocationlocation/group1/M00root/usr/fastdfs/fastdfs0/data;}ERROR-file:ini_file_reader.c,line:ERROR-file:ini_file_reader.c,line:315,includefile"http.conf"notexists,line:"#includehttp.conf"ERROR-file:/root/Open_Package/fastdfs-nginx-module/src/common.c,line:155,loadnffile"/etc/fdfs/mod_fastdfs.conf"fail,retcode:2016/08/0623:51:13[alert]12734#0:workerprocess12735exitedwithfatalcode2andcannotberespawnednginx-workernginx無(wú)法提供web服務(wù),表示/etc/fdfs/下缺少http.conf和mim
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水陸聯(lián)運(yùn)貨物保險(xiǎn)及運(yùn)輸合同
- 二零二五年度新能源儲(chǔ)能技術(shù)聘用合同8篇
- 二零二四年度信息化設(shè)備融資租賃管理合同3篇
- 課件:正確認(rèn)識(shí)高職院校內(nèi)部質(zhì)量保證體系診斷與改進(jìn)
- 二零二五年度牧草生物質(zhì)能項(xiàng)目合作協(xié)議4篇
- 2025版農(nóng)家樂(lè)民宿租賃管理服務(wù)合同2篇
- 二零二五版年薪制勞動(dòng)合同:房地產(chǎn)企業(yè)銷售精英激勵(lì)方案4篇
- 第三單元 資產(chǎn)階級(jí)民主革命與中華民國(guó)的建立(解析版)- 2023-2024學(xué)年八年級(jí)歷史上學(xué)期期中考點(diǎn)大串講(部編版)
- 2025年度個(gè)人家政服務(wù)分期支付合同范本2篇
- 二零二五年度地鐵車站安全門(mén)系統(tǒng)采購(gòu)合同
- 2024年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 人教版初中語(yǔ)文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩(shī)詞名篇名句默寫(xiě)
- 2024-2025學(xué)年人教版(2024)七年級(jí)(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- ESG表現(xiàn)對(duì)企業(yè)財(cái)務(wù)績(jī)效的影響研究
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2024年4月浙江省00015英語(yǔ)二試題及答案含評(píng)分參考
- 黑枸杞生物原液應(yīng)用及產(chǎn)業(yè)化項(xiàng)目可行性研究報(bào)告
- 2024年黑龍江省政工師理論知識(shí)考試參考題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論