锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 瀵?/span>Apache Server Status鐨勫惎鐢?/span> 瀵?/span>Apache鐨勭姸鎬佺鐞嗙殑妯″潡鏄?/span>LoadModule status_module modules/mod_status.so錛屾墍浠ヨ繖涓渶瑕佹湁錛岀劧鍚庢墦寮涓嬮潰鐨勯厤緗?/span> ExtendedStatus On 閰嶇疆Apache Server Status鐨勬潈闄?/span> <location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from .foo.com </location> 鎵撳紑鏌ョ湅鐨勮瘽灝變嬌鐢?/span>http:// your.server.name/server-status鏉ヨ闂紝娉ㄦ剰VH鐨?/span>apache瑕佽緗湪涓涓?/span>VH涓?/span>,涓嶇劧浣犲垎涓嶆竻鏄偅涓湴鍧鏉ユ煡鐪嬬湅榪欎釜淇℃伅.浣?/span>ExtendedStatus涓嶈兘鏀懼湪VH涓?/span>.
錛堟敞鍐宻f鐨刟pp錛岀櫥璁?callback-url,鎵цsql鏌ヨ錛?br />
__author__ = 'scott'
import imp
imp.load_source('init','../init_script.py')
import urllib2,urllib,json,sys,os
import traceback,threading,time,struct,os,os.path,shutil,distutils.dir_util,array,base64,zlib,struct,binascii
import datetime
from libs.python.lemon import webapi
callback = 'http://localhost:8002/oauth'
client_id = '3MVG9ZL0ppGP5UrC_wQ8U02mOhowPKwjeaaLsWZ3BcYYVqiSsy1rL_D2h6qG.rGPnb_j6IcgLHPdhmvomzDFj'
client_secret = '9046731979xxxxxxx'
def accessToken(request,code,state):
url = 'https://login.salesforce.com/services/oauth2/token'
data = {
'grant_type':'authorization_code',
'code':code,
'client_id':client_id,
'client_secret':client_secret,
'redirect_uri':callback
}
result = ''
try:
result = urllib2.urlopen(url,urllib.urlencode(data) )
except:
traceback.print_exc()
result = result.read()
return json.loads( result )
def oauth(request):
cr = webapi.SuccCallReturn()
code = webapi.GET(request,'code','')
state = webapi.GET(request,'state','')
cr.result=[code,state]
token = accessToken(request,code,state)
cr.result.append(token)
print token
try:
sqlExecute(token['access_token'],token['instance_url'])
except:
traceback.print_exc()
return cr.httpResponse()
import cookielib
# -H "Authorization: OAuth token" -H "X-PrettyPrint:1" "
def sqlExecute(token,url_host):
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
sf_cmd_query="%s/services/data/v20.0/query/?%s"%(url_host, urllib.urlencode({'q':'select count() from account'}))
headers = {
'Authorization':'OAuth %s'%token,
'X-PrettyPrint':1
}
httpReq = urllib2.Request( sf_cmd_query,headers=headers )
r = opener.open(httpReq).read()
print r
pass
url1 = """https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=first"""%(client_id,callback)
def launchBrowserForOAuth():
import webbrowser
webbrowser.open(url1)
if __name__ == '__main__':
launchBrowserForOAuth()
]]>
A - 縐誨姩緇堢錛?B - 鎺ュ叆鏈嶅姟鍣?緗戝叧) , C,D,E - 鍐呴儴鏈嶅姟緋葷粺 錛?M -鍐呴儴鏈嶅姟緋葷粺鐨勬秷鎭槦鍒?
B 鐢ㄤ簬鎺ュ叆鎴愬崈涓婁竾鐨凙錛孊涓嶅叿澶囦笟鍔¤兘鍔涳紝鍙湁CDE鎵嶈兘涓嶢榪涜涓氬姟浜や簰錛孧鍏呭綋娑堟伅綆¢亾銆?br />涓鑸殑鍋氭硶錛屽悇涓郴緇熸ā鍧楁寚瀹氭爣鍑嗗崗璁紝鍙互鏄痻ml鎴栬呬簩榪涘埗鐨勶紝鐒跺悗鍚勫紑鍙戝悇鐨勶紝socket鎴栬卙ttp絳夐儴浠訛紝寮鍙戣璦涔熸槸cpp錛宲ython錛宩ava榻愪笂闃點?br />榪欑寮鍙戞ā寮忚繃浜庣箒鐞愶紝妯″潡涔嬮棿鐨勮﹀悎姣旇緝绱у瘑錛屽簲璇ユ妸搴旂敤鍜岄氫俊緇嗚妭鍓ョ鍑烘潵銆?br />鎴戠殑鍋氭硶鏄墍鏈夋湁緋葷粺瀵硅薄涔嬮棿鐨勬秷鎭紶閫掗兘鏄熀浜嶳pc鎺ュ彛綰х殑璋冪敤錛屾洿鏈笉璁捐閫氫俊銆佸崗璁紪鐮侊紝鍙鏍規嵁IDL灝卞彲浠ワ紝A璇鋒眰C鐨勬湇鍔★紝閭鍙渶瑕佽皟鐢–鐨勬帴鍙e嚱鏁板嵆鍙紝搴曢儴鐨勫伐浣滐細
A鍒癇鐨剆ocket閫氫俊錛孊灝咥鐨勬秷鎭漿鎹㈠埌M錛孧鍐嶄紶杈撳埌C錛岃繖浜涘伐浣滈兘鍙互閫忚繃Rpc灞傚畬鎴愰忔槑錛屽弽榪囨潵C鐨勮皟鐢ㄨ姹備篃瀹夊師璺繑鍥炲埌A銆?br />C瑕佸彂閫佹秷鎭埌A錛岄偅璋冪敤A鐨勬帴鍙o紝rpc灞傝嚜鍔ㄥ皢璇鋒眰杞寲鏈狹Q鍗忚錛岃璺敱鍒癇錛孊鎵懼埌A鐨勯摼鎺ワ紝騫跺皢Mq娑堟伅杞寲鏈猻ocket娑堟伅浼犻掑埌A錛孉绔帴鏀舵秷鎭漿鎹㈡垚Rpc鍑芥暟鍥炶皟鍒癆鐨勫簲鐢ㄤ唬鐮併?br />
闄や簡綆鍗曠殑璋冪敤銆佽繑鍥炴柟寮忚繕鏈?br />鍗曢」璋冪敤璇鋒眰銆佸紓姝ヨ皟鐢ㄨ姹傘佹秷鎭箍鎾姹?br />
B绔彲浠ラ氳繃澶栭儴閰嶇疆浣垮緱A鐨勮姹傝礬鐢卞埌C錛屾垨鑰匘錛屾垨鑰呭叏閮ㄦ帴鏀訛紝鍙栧喅涓庡簲鐢ㄩ渶姹?搴旂敤榪樻槸闆嗙兢)
MQ濡傛灉緋葷粺鎬葷嚎涓鑸紝灝嗗悇涓湇鍔″瓙緋葷粺閾炬帴鎴愮綉緇滐紝鏄瀯鎴愭暣涓郴緇熺殑鍩虹銆俁pc鍙互瑙h劚紼嬪簭鍛橈紝璁╁叾灝嗙粡鍘嗚姳鍦ㄥ叿浣撲笟鍔′笂錛岃屼笖鍩烘湰鍙緙栧啓鑻ュ共鐨勬湇鍔℃帴鍙e嚱鏁板嵆鍙?br />
褰撶劧瑕佸疄鐜頒互涓婂姛鑳界壒鐐癸紝寰堝鍙敤鐨勬鏋訛紝CORBA錛孌COM錛孖CE絳夌瓑錛屼絾榪欎簺榪囦簬搴炲ぇ錛屽鐜瑕佹眰涔熸湁闄愬埗錛屽鏋滆鏇撮珮鏁堛佺伒媧葷殑榪愮敤鍜屽寘瑁呴渶瑕佸ぇ閲忎慨鏀瑰叾搴曞眰浠g爜錛屼笌絎笁鏂圭殑鏁村悎鍙兘宸ヤ綔鍦ㄤ粬浠殑涓婂眰鎺ュ彛涓婏紝榪欎釜浠や漢寰堟伯涓э紝浼氬鑷翠駭鐢熸洿澶氱殑渚濊禆鍜屽鏉傜殑緙栫▼鎶宸с?br />榪欎簺鍏ㄩ兘涓㈠純錛岃繕鏄嚜宸辯殑rpc
]]>
]]>
1.鏀寔榪囧鐨刢ahce 瀛樺偍鏂瑰紡錛屼粈涔坓oogle鐨勬暟鎹簱錛宱racle鐨勪篃鏈夛紝铏界劧浠g爜妗嗘灦鐨勫ソ錛屼絾寰堝涓滆タ閮戒笉綆$敤錛屾墍浠ヤ唬鐮佺淮鎶や笉澶熺伒媧?br /> 2.tilecache閫氳繃apache鎻愪緵web鐨剋ms鏈嶅姟錛岀劧鍚巘ilecahe閲屽啀璇鋒眰鍚庣鐨刧eoserver鏈嶅姟錛屼駭鐢熺殑cache鏍規嵁浠栧畾 涔夌殑涓涓綉鏍間緷嬈℃寜x,y,z鐨勭儲寮曞瓨鍌ㄥ湪鏂囦歡緋葷粺閲岄潰錛屽茍灝嗗浘褰㈣繘琛岀紪鐮佸垎綾匯傝繖縐嶅疄鐜板茍娌℃湁闂錛屼絾瑕佺煡閬撹繖浜沜ache鍑烘潵鐨勫浘鍍忔枃浠舵槸閭d箞鐨勫涓?閮介浂紕庯紝鏈変簺鍥劇墖榪樺涓嶄笂涓涓枃浠剁郴緇熷熀鏈殑涓涓瓨鍌ㄩ〉澶у皬錛屾墍浠ヤ細澶ч噺嫻垂絀洪棿錛涚敱浜庢枃浠墮浂紕庝笖澶氾紝縐誨姩榪欎簺鏂囦歡涔熸槸涓浉褰撳ぇ鐨勯棶棰橈紝涓嬈′負浜嗗皢榪欎簺 cahce tile鏂囦歡浠嶢鏈哄櫒鎷瘋礉鍒癇鏈哄櫒灝界劧鑺辮垂浜?澶╃殑鏃墮棿銆?br />
tilecache鏈夎繖浜涗笉濡傛垜鎰忕殑鍦版柟錛屾墍浠ヤ箣鍓嶈嚜宸變篃鑰冭檻鍐嶅啓涓涓猼ilecache鐨?backend錛屽皢娓叉煋鍑烘潵鐨勪笢瑗跨洿鎺ュ瓨鍌ㄨ繘pgsql鏁版嵁搴擄紝閭d互鍚庡彧瑕佸鍑烘暟鎹簱鐨則ablespace灝卞彲浠ヤ簡錛屽棷錛佺殑紜彲琛岋紝涔熻窇浜嗕竴孌墊椂闂?br /> 鏈鍚庤繕鏄喅瀹氭斁寮僼ilecahce浜嗭紝姣曠珶wms鑷繁宸茬粡瀹炵幇浜嗭紝瑕佸啀鍋氫釜backend涔熸槸寰堢畝鍗曪紝鍋氬畬鐩存帴鏁村悎榪泈ms鏈嶅姟鍣ㄣ?br /> 鎴戣冭檻閲囩敤sqlite鏉ュ瓨鍌ㄨ繖浜涚摝鐗囧浘褰紝鐢變簬sqlite澶勭悊澶氱嚎紼嬫椂澶╂ф湁鐐歸棶棰橈紝澶氱嚎紼嬩笉鑳藉叡浜悓涓涓繛鎺?connection),鎵浠ュ疄鐜扮殑鏃跺欏湪姣忎釜綰跨▼鍒涘緩浜嗘柊鐨勮繛鎺ワ紝寮閿鏄湁涓浜涚殑錛岄偅姣斾箣鍓嶅疄鏃惰姹俆ileServer瑕佸揩鐨勫浜嗐?br /> 鐜板湪wms璺戠殑寰堝紑蹇冧簡錛宑pu涔熶笉蹇欎簡錛屽氨鏄瘡姝諱簡紜洏浜?br /> 涓鍙版満鍣ㄤ笂娓叉煋鐨勫湴鍥劇摝鐗囨暟鎹崟鐙瓨鍌ㄥ湪涓涓枃浠墮噷闈紝瑕侀儴緗插埌鍙﹀涓鍙版満鍣ㄤ篃寰堟柟渚夸簡錛屽彧闇瑕佹嫹璐濅竴涓嬪氨鍙互浜?br /> 鎺ョ潃鐪嬬湅灝嗚繖涓猻qlite鎹㈡垚pgsql錛岀湅鐪嬫ц兘鍝釜鏇村己涓鐐?br /> python浠g爜瀹炵幇:
2 if not self.enable:
3 return None #琛ㄧず闇瑕佸疄鏃惰姹傚湴鍥炬暟鎹?/span>
4
5 tile = None
6 dbconn = sqlite3.connect(self.dbname)
7 try:
8 #dbconn.text_factory = str
9 cr = dbconn.cursor()
10 cr.execute('select image from tiles where res=? and x=? and y=?',(res,xy[0],xy[1]))
11 r = cr.fetchone()
12 if not r:
13 tile = renderTile(mapid,res,xy,size)
14 if tile and tile.pixmap:
15 b = sqlite3.Binary(tile.pixmap)
16 print '*'*20
17 cr.execute(u'insert into tiles (res,x,y,z,image) values(?,?,?,?,?)',(res,xy[0],xy[1],0,b))
18 else:
19 tile = r[0]
20 self.cacheshooted+=1
21 print 'shooted ',self.cacheshooted
22 except:
23 traceback.print_exc()
24 tile = None
25 dbconn.commit()
26 return tile
27
璁板緱絀虹殑鏃跺欏湪flex绔啓涓嚜鍔ㄨ窇鍦板浘鐨勭▼搴忥紝涓嶈兘璁╂満鍣ㄩ棽鐫錛屾病浜嬬殑鏃跺欐妸鍏ㄥ浗鍦板浘鐨勭摝鐗囪嚜鍔ㄤ駭鐢熶竴涓嬶紝鍏嶅緱鍦ㄨ闂湴鍥劇郴緇熺殑鏃跺欏啀鍘諱駭鐢熺摝鐗囷紒
]]>
]]>
鏍囩錛歛pache 閰嶇疆 gzip
鐗堟潈澹版槑錛氬師鍒涗綔鍝侊紝璋㈢粷杞澆錛佸惁鍒欏皢榪界┒娉曞緥璐d換銆?br>1銆乧onf/httpd.conf
1) 鍘繪帀#LoadModule headers_module modules/mod_headers.so鍓嶉潰鐨勬敞閲?錛?br>2) 娣誨姞LoadModule deflate_module modules/mod_deflate.so錛?br>3) 鍘繪帀#Include conf/extra/httpd-vhosts.conf鍓嶉潰鐨勬敞閲?銆?br>
2銆乧onf/extra/httpd-vhosts.conf
鍦╒irtualHost涓坊鍔?br> <Location "/">
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
渚嬪錛?br><VirtualHost *:80>
DocumentRoot "D:/Apache2.2/htdocs/wef"
<Location "/">
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
</VirtualHost>
娉細鎴戜嬌鐢ㄧ殑apache鐗堟湰涓?.2.13銆?br>
]]>
鏈姞鍏ラ亾璺拰澶氳竟褰㈡枃鏈爣娉紝姝e湪璋冩暣鏍囨敞綆楁硶鍜岄昏緫錛?*.xml鎺у埗鍦板浘錛宮apsld.xml瀹氫箟灞傛牱寮忛鏍?br>
紼嬪簭婕旂ず錛?a style="text-decoration: underline;" title="http://wallizard.vicp.net:9000/swBox_release_2010.11.08.rar" >http://wallizard.vicp.net:9000/swBox_release_2010.11.08.rar
]]>
12綰у埆閲囩敤tilecache浜х敓鍥懼潡鍒皃ostgres瀛樺偍,緇樺埗榪囩▼鑺辮垂浜?2澶?鐪熷笇鏈涙湁嫻烽噺絀洪棿鍜屾洿澶氱殑鏈哄櫒渚涙垜浣跨敤闃?br>
]]>
1.寮鍙戝伐鍏?
Geoserver,Openlayer,Ext-js,Postgres/Postgis,Python2.6,PIL,TileCache
2.鍦板浘鏁版嵁
鎴戠殑鍦板浘鏁版嵁鏄?8騫寸殑鍏ㄥ浗鍦板浘錛屾寜姣忎釜鐪佸競鍒嗛殧寮鏉ワ紝姣忎釜鐪佸競鍙堝垎浜嗚嫢騫蹭釜鍥懼眰鏂囦歡錛屾牸寮忔槸mapinfo鐨凾ab錛屽閲?0G
鐢變簬娌℃湁鍏ㄥ浗澶ф瘮渚嬪浘錛屽湪鍋剁劧鐨勪竴涓満浼氫粠緗戜笂涓嬭澆鍒頒竴浠紺/S鐨勭洃鎺х郴緇燂紝娌℃兂鍒板畨瑁呯洰褰曞唴灝辨湁涓浠藉叏鍥藉浘錛屽氨鏄瘮渚嬩笉楂樸?br>3.澶勭悊榪囩▼
1.Tab杞崲鎴恠hp: Ogr宸ュ叿鍙互瀹屾垚榪欎袱縐嶆牸寮忕殑杞崲錛岀紪鍐檖ython鑴氭湰鍙互杞繪槗澶勭悊瀹?br> 鍦ㄨ漿鎹㈡暟鎹箣鍓嶉渶瑕佹彁閱掔殑鏄紝鍙戠幇鍦ㄥ鐞嗗杈瑰艦鍥懼眰鏃訛紝榪欎釜澶氳竟褰㈠浘灞傚茍涓嶆槸綆鍗曠殑澶氳竟褰紝涔熷氨鏄偅縐峬apinfo鍏佽瀛樺湪polygon鍜宲line鐨勫浘灞傦紝榪欏皢瀵艱嚧涔嬪悗鐨勫鍏ョ┖闂存暟鎹簱鐨勫け璐ワ紝鍥犱負postgis瑕佹眰姣忎釜鍥懼眰鏁版嵁綾誨瀷蹇呴』鏄竴鑷寸殑錛屼笉鑳藉瓨鍦ㄥ縐嶇被鍨嬶紝鎵浠ョ紪鍐檓apbasic鑴氭湰錛屽皢榪欎簺pline瀵硅薄浠庤繖澶氳竟褰㈠浘灞備腑鍓斿幓鍗沖彲銆?br>2.鏁版嵁鏍¢獙錛氥榪欎釜榪囩▼闈炲父閲嶈錛屼換浣曟彁渚涚殑鐨勭煝閲忔暟鎹兘鏈夊彲鑳藉瓨鍦ㄩ敊璇暟鎹紝鎵浠ョ涓姝ュ繀欏昏淇榪欎簺鍙兘瀛樺湪鐨勯敊璇紝宸ュ叿灝辨槸錛★綊锝冿姬锝夛綋,浣跨敤鍏跺伐鍏峰姣忎釜鐪佸競鐨勬瘡涓浘灞傛枃浠惰繘琛屼慨澶嶃?br>3.瀵煎叆絀洪棿鏁版嵁搴擄細銆緙栧啓鑴氭湰錛屽皢锝擄綀锝愭暟鎹漿鎴愶綋锝戯綄鏂囦歡錛屾鏃跺繀欏繪敞鎰忕┖闂存暟鎹簱鐨勫瓧絎︾紪鐮佷笌锝擄綉锝屾暟鎹瓧絎︾紪鐮佽鍚誨悎鎴栬呰兘澶熻嚜鍔ㄨ漿鎹€傦綈锝囷紥锝擄綉鐢變簬杞崲鎴愶綋锝戯綄鏃訛紝鐢變簬锝擄綀锝愭暟鎹腑鏌愪簺鍥懼眰琛ㄥ瓨鍌ㄧ殑瀛楃緙栫爜涓嶇粺涓瀵艱嚧浜х敓鐨勯潪娉曠殑锝擄綉锝屾暟鎹紝鎵浠ュ繀欏誨榪欎簺鏁版嵁榪涜淇錛屽茍閲囩敤锝曪綄锝旓綊锝侊絽锝勶綁锝斿皢鏁版嵁榪涜杞爜鎴愭暟鎹殑瀛楃闆嗙被鍨嬶紝鎴戜嬌鐢ㄧ殑鏄痷tf-8.
4.鏁版嵁鍒嗙錛?鐢變簬鎻愪緵鐨勫叏鍥藉湴鐞嗘暟鎹槸娌℃湁鏍規嵁搴旂敤鏉ュ垎灞傜殑錛屾墍鏈夌殑閬撹礬閮藉悎鍦ㄥ悓涓涓彨road鐨勫浘灞傚唴錛岀劧鍚庨氳繃灞炴ф潵鍖哄垎閬撹礬鐨勭駭鍒紝鐢變簬鎴戜滑鍦ㄦ帶鍒舵樉紺洪亾璺椂鏄渶瑕佸垎灞傚垎綰у埆鐨勶紝鎵浠ュ繀欏誨皢榪欎簺鏁版嵁瑕佸垎紱繪垚涓嶅悓鐨勯亾璺浘灞傦紝閬撹礬鍏?0綰у埆錛?-9錛夛紝緙栧啓鑴氭湰灝嗘瘡涓渷甯傜殑閬撹礬鍒囧壊鎴恟oad_?10綰ч亾璺眰(select into鍗沖彲鎼炲畾)銆?br>鍚屾牱錛岄櫎浜嗛亾璺箣澶栬繕鏈夊叾浠栫殑姣斿娌蟲祦錛孭OI瀵硅薄絳夐兘闇瑕佽繘琛屽垎鍓插埌涓嶅悓鍥懼眰浠ヤ究鏇寸簿紜殑鐜板疄鎺у埗銆?br>5.閰嶇疆Geoserver錛?鏁版嵁閮芥湁浜嗭紝鎺ヤ笅鏉ュ氨鏄厤緗粯鍒跺紩鎿庝簡銆侴eoserver鎻愪緵WFS,WMS鏈嶅姟錛屾ц兘涓鑸紝鐢變簬鏄痡ava寮鍙戠殑銆備笉綆?721錛岄厤緗簡鏈鏂扮殑I5涓繪満錛屽皢java铏氭嫙鏈虹殑鍐呭瓨璁劇疆鐨勬渶澶э紝灝唒ostgis鐨勬暟鎹簱鍐呭瓨涔熻凍澶熻皟澶с傛墜宸ユ坊鍔犱簡1錛?涓浘灞傚埌geoserver錛宲review涓涓嬶紝ok錛?br>鎺ヤ笅鏉ョ紪鍐欐帶鍒惰繖浜涘浘灞傜殑SLD浜嗭紝榪欎簺鑺變簡濂戒簺鏃墮棿瀛︿範鍜屽紑鍙戯紙瀛︿範sld瀵規垜浠ュ墠寮鍙戝祵鍏ュ紡鍦板浘寮曟搸椋庢牸閰嶇疆涔熸槸涓縐嶅府鍔╋紝涔嬪悗鐨勫祵鍏ュ紡鍦板浘寮曟搸涔熷叏閮ㄤ嬌鐢╯ld榪涜閰嶇疆浜嗭紒錛?br>鐢變簬鍏ㄥ浗鏁版嵁鍒?1涓渷甯傦紝姣忎釜鐪佸競閮介厤緗簡21涓浘灞傦紝鎵浠ヨ浜哄伐11鍔犲埌geoserver榪樼湡鏄緢澶х殑闂錛屼笉榪囨病鍏崇郴錛屾湁python鍦ㄦ墜錛岀劧鍚庡geoserver鐨勯厤緗枃浠剁爺絀朵簡涓鎶婁究鍐欎簡鑴氭湰灝嗗嚑鐧句釜鍥懼眰鍏ㄥ姞浜嗚繘鍘伙紝鐒跺悗灝嗚繖浜涘浘灞傛寜鐪佸競榪涜鍒嗙粍錛屽啀嬈review錛宱k錛?br>6.Cache Tile鐢熸垚: 浣跨敤榪嘒eoWebCache錛屽彂鐜板緢澶氬湴鏂瑰疄鍦ㄤ笉濂界悊瑙o紝騫稿ソ鎵懼埌浜員ileCache錛屼唬鐮佷篃瀹規槗淇敼錛岀爺璇諱簡TileCache浠g爜涔嬪悗淇敼浜哊澶勫湴鏂癸紝鎶婃晥鐜囨彁楂樹簡10鍊嶄互涓娿傜幇鍦ㄧ殑闂鍦ㄤ簬Tilecache瀹炵幇浜咲isk Cache,Memory Cache,浣嗗氨鏄病鏈塂B cache錛屾瘡涓猼ile灝嗗垱寤轟竴涓枃浠訛紝濡傛灉榪欎簺鏂囦歡寰堝皬錛屾湁鐨勭敋鑷蟲墠鍑犲崄瀛楄妭涔熻嫻垂涓涓枃浠跺潡絀洪棿錛屾晥鐜囦笉楂橈紝濡傛灉閲囩敤db鐨勮瘽絀洪棿灝辮兘鑺傜渷寰堝錛岀瓑浠ュ悗鏈変簡鏃墮棿鑷繁緙栧啓涓涓悗绔負postgres鐨凾ile Cache鍚с?br>
Tile Cache鐢熸垚鏈変簺闂瑕佹敞鎰忥細
錛?銆絀虹櫧锝旓綁锝岋絽錛氥鐢變簬鎴戣緗殑緇樺埗璁劇疆鐨凚Box闈炲父澶э紝鎵浠ュ湪緇樺埗鐨勬椂鍊欐湁浜涚┖鐧藉尯鍩熶篃灝嗘彁浜ょ粰geoserver榪涜澶勭悊錛岃繖鏍鋒氮璐逛簡澶勭悊鏃墮棿錛屽悓鏃惰繖浜涗駭鐢熺殑灝忚鏍煎浘鍧楀ぇ澶у崰鎹簡紓佺洏絀洪棿錛屾墍浠ヤ慨鏀圭殑浠g爜灝嗕笉瀛樺偍榪欎簺絀虹櫧tile錛屼粎浠呭瓨鍌ㄨ繖浜泃ile鐨勬枃浠跺悕縐幫紝鑰屼笉淇濆瓨鍐呭
錛?銆tilecache鐨凴esolutions錛孼oomLevels錛孊Box鍜孫penlayers鐨勫睘鎬у繀欏諱竴鏍鳳紝鍚﹀垯Opnelayers鏃犳硶鏄劇ず姝g‘鐨則ile
3. tile鐩鎬氦媯嫻嬶細 鍚屾牱鏄┖鐧藉尯鍩熺殑緇樺埗錛屽鏋滄瘡嬈¢兘鎻愪氦緇檊eoserver鐨勮瘽錛実eoserver灝嗘牴鎹厤緗殑layer鍘葷浉浜ゅ茍緇樺埗涓嬈★紝榪欏氨瀹屽叏娌℃湁蹇呰鐨勶紝鎴戠殑瑙e喅鏂瑰紡灝辨槸鎻愬墠灝?1涓渷甯備駭鐢熶粬浠殑MBR錛岀劧鍚庡啀tile榪涜鎻愪氦緇檊eoserver涔嬪墠錛屽皢璇鋒眰鐨則ile鐨刡box涓庤繖浜涚渷甯傜殑mbr榪涜鐩鎬氦嫻嬭瘯錛屽彧鏈夌浉浜ょ殑鍥懼眰鎵嶉佸叆geoserver緇樺埗
4. 澶х綉鏍肩粯鍒訛細 姣忔浠?56×256鐨勮鏍肩粰geoserver緇樺埗鍏ㄥ浗鍥劇殑璇濇晥鐜囧疄鍦ㄥお浣庯紝涔嬪悗淇敼鎴?048×2048瑙勬牸錛屾暣浣撶殑緇樺埗鏁堢巼涓婂崌浜唍鍊嶏紝緇樺埗瀹屼簡涔嬪悗閲囩敤split_tile.py灝嗚繖浜涘ぇ鍧楀垏鍓叉垚256瑙勬牸鐨勫皬鍧楋紝蹇呴』娉ㄦ剰浜х敓鐨勫簭鍙?br>
鍐欏緱濂界瘡
]]>
BaseServer: 瀹氫箟鍩虹鏈嶅姟鍣ㄦ帴鍙o紝榪欎簺鍔熻兘鎺ュ彛鎻愪緵緇欏瓙綾葷戶鎵褲傚悓鏃舵彁渚涙湇鍔″鐞嗙殑楠ㄦ灦
serve_forever() 寰幆璋冪敤 handle_request()
handle_request() 璋冪敤瀛愮被鐨刧et_request() 錛屽湪tcpServer鏃跺疄鍒欒繘琛宎ccept()搴旂瓟; 楠岃瘉澶勭悊 verify_request();
鏈緇堝鐞嗚姹?process_request()錛?br> verify_request() 铏氬嚱鏁?
process_request() 铏氬嚱鏁幫紝榪欎釜鍑芥暟騫舵病鏈夌洿鎺ュ湪BaseServer鐨勫瓙綾籘cpServer涓閲嶈澆錛岃屾槸鍦═cpServer鐨勬淳鐢熺被涓氳繃鍙︿竴涓埗綾繪潵瀹?br>鐜幫紝姣斿 ThreadingTCPServer鐨勫熀綾籘hreadingMixIn.process_request()瀹炵幇浜嗘鍔熻兘鍑芥暟
finish_request(request, client_address) 鎵ц涓嬈″畬鏁寸殑socket鏁版嵁璇誨叆澶勭悊錛屽鏋滄槸ThreadMixInTcpServer浜х敓鐨剅equest錛岃繖涓柟娉曞唴蹇呴』瀹炶寰幆璇誨彇socket鏁版嵁,鐩村埌socket鍏抽棴銆?姝ゅ request 灝辨槸 socket瀵硅薄)
"""Finish one request by instantiating RequestHandlerClass."""
self.RequestHandlerClass(request, client_address, self)
##---------------------------------------------
TcpServer: tcp鏈嶅姟鍣?br> __init__(self, server_address, RequestHandlerClass) 闇瑕佹彁渚涙湇鍔′睛鍚湴鍧鍜岃姹傚鐞嗙被瀵硅薄
server_bind() 緇戝畾鏈嶅姟鍣ㄥ湴鍧
server_activate() 嬋媧繪湇鍔″櫒
server_close() 鍏抽棴鏈嶅姟鍣?
fileno() 榪斿洖鏈嶅姟鍣╯ocket鐨勫彞鏌刦d緙栧彿
get_request() 鎺ユ敹搴旂瓟accept()
close_request(request) 鍏抽棴socket,request鍗充負socket瀵硅薄
涓夌杈撳嚭澶勭悊鏂瑰紡: 闃誨鏂瑰紡銆佺嚎紼嬪鐞?ThreadingMixIn)銆佽繘紼嬪鐞?ForkingMixIn)
ThreadingMixIn: 綰跨▼妯″瀷
process_request( request, client_address) 涓鴻姹傜殑閾炬帴鍒涘緩鏂扮殑綰跨▼,鍦ㄥ垱寤虹嚎紼嬫椂鐩存帴鎸囧畾綰跨▼鍏ュ彛鍜屽弬鏁?
t = threading.Thread(target = self.process_request_thread,
args = (request, client_address))
if self.daemon_threads:
t.setDaemon (1)
try:
self.finish_request(request, client_address)
self.close_request(request)
except:
self.handle_error(request, client_address)
self.close_request(request)
ThreadingTCPServer(ThreadingMixIn, TCPServer) 瑁呴厤鎴愮嚎紼嬫睜澶勭悊鐨則cp鏈嶅姟鍣?br>
BaseRequestHandler: 璇鋒眰澶勭悊鍩虹瀵硅薄錛屾彁渚涚粺涓鐨勮涓烘帴鍙e疄鐜板鐞唖ocket鏁版嵁銆?BaseRequestHandler姣旇緝濂界帺錛屽湪鏋勯犲嚱鏁板唴瀹屾垚浜嗘墍鏈夌殑鎿嶄綔錛岃浠g爜錛?
self.request = request
self.client_address = client_address
self.server = server
try:
self.setup()
self.handle()
self.finish()
finally:
sys.exc_traceback = None # Help garbage collection
StreamRequestHandler(BaseRequestHandler) 嫻佸紡socket澶勭悊綾?br> setup() 璁劇疆濂絪ocket瀵硅薄鍜岃鍐欐枃浠跺彞鏌?rfile/wfile
HTTPServer(SocketServer.TCPServer) http鏈嶅姟鍣?br>
BaseHTTPRequestHandler(SocketServer.StreamRequestHandler) 嫻佸紡鐨勮姹傚鐞嗙被
handle() 澶勭悊鍏ュ彛錛屽湪鍩虹被BaseRequestHandle()鐨勬瀯閫犲嚱鏁頒腑鐩存帴璋冪敤
handle_one_request() 濡傛灉涓嶆槸澶勭悊涓嬈″垯榪斿洖false銆傛帴鏀朵竴嬈ocket鏁版嵁錛岃В鏋恜arse_request(),璋冪敤瀵瑰簲鐨刣o_xxx浜嬩歡
python 鐨刣aemon綰跨▼錛?br>濡傛灉涓涓繘紼嬬殑涓葷嚎紼嬭繍琛屽畬姣曡屽瓙綰跨▼榪樺湪鎵ц鐨勮瘽錛岄偅涔堣繘紼嬪氨涓嶄細閫鍑猴紝鐩村埌鎵鏈夊瓙綰跨▼緇撴潫涓烘錛屽浣曡涓葷嚎紼嬬粨鏉熺殑鏃跺欏叾浠栧瓙綰跨▼涔熶箹涔栫殑璺熻佸ぇ鎾ら鍛紵閭e氨瑕佹妸閭d簺涓嶅惉璇濈殑浜鴻緗負鍚瘽鐨勫皬寮燂紝浣跨敤綰跨▼瀵硅薄鐨?font color="#99cc00">setDaemon()鏂規硶錛屽弬鏁頒負bool鍨嬨?font color="#99cc00">True鐨勮瘽灝變唬琛ㄤ綘瑕佸惉璇濓紝鎴戣佸ぇ錛堜富綰跨▼錛夋壇鍛鹼紝浣犱篃瑕佽窡鐫鎾わ紝涓嶈兘鎷栧悗鑵褲傚鏋滄槸False鐨勮瘽灝變笉鐢ㄩ偅涔堝惉璇濅簡錛岃佸ぇ鍏佽浣犱滑灝嗗湪澶栧啗鍛芥湁鎵涓嶅彈鐨勩傞渶瑕佹敞鎰忕殑鏄?font color="#99cc00">setDaemon()鏂規硶蹇呴』鍦ㄧ嚎紼嬪璞℃病鏈夎皟鐢?font color="#99cc00">start()鏂規硶涔嬪墠璋冪敤錛屽惁鍒欐病鏁堟灉銆?/span>
]]>