??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久久影院色,久久综合狠狠综合久久,99久久这里只精品国产免费http://m.shnenglu.com/socketref/category/12988.htmlgis,mouse,luolasizh-cnThu, 02 Jul 2015 11:30:25 GMTThu, 02 Jul 2015 11:30:25 GMT60salesforce的oauth授权http://m.shnenglu.com/socketref/archive/2015/06/29/211090.html攑ֱ阿狗 攑ֱ阿狗 Mon, 29 Jun 2015 12:21:00 GMThttp://m.shnenglu.com/socketref/archive/2015/06/29/211090.htmlhttp://m.shnenglu.com/socketref/comments/211090.htmlhttp://m.shnenglu.com/socketref/archive/2015/06/29/211090.html#Feedback0http://m.shnenglu.com/socketref/comments/commentRss/211090.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/211090.html讉KsfQ记录下一下代?br />
Q注册sf的appQ登?callback-url,执行sql查询Q?br />
#coding:utf-8
__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()


攑ֱ阿狗 2015-06-29 20:21 发表评论
]]>
Rpc+Mq实现分布式系l?/title><link>http://m.shnenglu.com/socketref/archive/2012/11/22/195531.html</link><dc:creator>攑ֱ阿狗 </dc:creator><author>攑ֱ阿狗 </author><pubDate>Thu, 22 Nov 2012 02:50:00 GMT</pubDate><guid>http://m.shnenglu.com/socketref/archive/2012/11/22/195531.html</guid><wfw:comment>http://m.shnenglu.com/socketref/comments/195531.html</wfw:comment><comments>http://m.shnenglu.com/socketref/archive/2012/11/22/195531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/socketref/comments/commentRss/195531.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/socketref/services/trackbacks/195531.html</trackback:ping><description><![CDATA[聊聊草草<br />实现一套通信框架 <br />A - Udl端Q?B - 接入服务?|关) , C,D,E - 内部服务pȝ Q?M -内部服务pȝ的消息队?<br />B 用于接入成千上万的AQB不具备业务能力,只有CDE才能与Aq行业务交互QM充当消息道?br />一般的做法Q各个系l模块指定标准协议,可以是xml或者二q制的,然后各开发各的,socket或者http{部Ӟ开发语a也是cppQpythonQjava齐上c?br />q种开发模式过于繁琐,模块之间的耦合比较紧密Q应该把应用和通信l节剥离出来?br />我的做法是所有有pȝ对象之间的消息传递都是基于Rpc接口U的调用Q更本不设计通信、协议编码,只要ҎIDL可以,AhC的服务,那A只需要调用C的接口函数即可,底部的工作:<br />A到B的socket通信QBA的消息{换到MQM再传输到CQ这些工作都可以透过Rpc层完成透明Q反q来C的调用请求也安原路返回到A?br />C要发送消息到AQ那调用A的接口,rpc层自动将h转化未MQ协议Q被路由到BQB扑ֈA的链接,q将Mq消息转化未socket消息传递到AQA端接收消息{换成Rpc函数回调到A的应用代码?br /><br />除了单的调用、返回方式还?br />单项调用h、异步调用请求、消息广播请?br /><br />B端可以通过外部配置使得A的请求\由到CQ或者DQ或者全部接Ӟ取决与应用需?应用q是集群)<br />MQ如果pȝȝ一般,各个服务子pȝ链接成网l,是构成整个系l的基础。Rpc可以解脱E序员,让其经历花在具体业务上Q而且基本只要~写若干的服务接口函数即可?br /><br />当然要实C上功能特点,很多可用的框ӞCORBAQDCOMQICE{等Q但q些q于庞大Q对环境要求也有限制Q如果要更高效、灵zȝq用和包装需要大量修改其底层代码Q与W三方的整合只能工作在他们的上层接口上,q个令h很沮丧,会导致生更多的依赖和复杂的~程技巧?br />q些全都丢弃Q还是自qrpc<img src ="http://m.shnenglu.com/socketref/aggbug/195531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/socketref/" target="_blank">攑ֱ阿狗 </a> 2012-11-22 10:50 <a href="http://m.shnenglu.com/socketref/archive/2012/11/22/195531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python~写|络通信框架-ZU程的消息传?/title><link>http://m.shnenglu.com/socketref/archive/2012/03/08/167450.html</link><dc:creator>攑ֱ阿狗 </dc:creator><author>攑ֱ阿狗 </author><pubDate>Thu, 08 Mar 2012 15:12:00 GMT</pubDate><guid>http://m.shnenglu.com/socketref/archive/2012/03/08/167450.html</guid><wfw:comment>http://m.shnenglu.com/socketref/comments/167450.html</wfw:comment><comments>http://m.shnenglu.com/socketref/archive/2012/03/08/167450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/socketref/comments/commentRss/167450.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/socketref/services/trackbacks/167450.html</trackback:ping><description><![CDATA[     摘要: 耗时1天,Ҏ公司应用需求,开发一U简易的基础的通信框架Q简化系l其它模块在|络通信工作斚w的复杂度单测试network.py service 做服务器Qnetwork.py client做客LQ传送多个消息报文,且能响应sockq接和断开状态考虑到性能和实际项目对U程需求,故都采用单连接单U程模式Q预留select多\复用接口Q可? service.selectIn()Code highl...  <a href='http://m.shnenglu.com/socketref/archive/2012/03/08/167450.html'>阅读全文</a><img src ="http://m.shnenglu.com/socketref/aggbug/167450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/socketref/" target="_blank">攑ֱ阿狗 </a> 2012-03-08 23:12 <a href="http://m.shnenglu.com/socketref/archive/2012/03/08/167450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swMap的Tile~冲实现http://m.shnenglu.com/socketref/archive/2011/07/11/150711.html攑ֱ阿狗 攑ֱ阿狗 Mon, 11 Jul 2011 14:34:00 GMThttp://m.shnenglu.com/socketref/archive/2011/07/11/150711.htmlhttp://m.shnenglu.com/socketref/comments/150711.htmlhttp://m.shnenglu.com/socketref/archive/2011/07/11/150711.html#Feedback0http://m.shnenglu.com/socketref/comments/commentRss/150711.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/150711.html 学习qMapGuid,MapServer,Qgis{多U开源地囑֤理服务YӞ开发了遵@WMS标准的地图服务,包括wms接入Q地图渲染服务?br /> q?q的旉跑的地图展示都是wms服务器实时请求TileServerq行l制QTileserverq程被部|在一台高端的服务器上Q同时启动了8个服务进E,讉K忙碌的时候机器有点吃不消Q就看到cpu那根UK的很高?br /> geoserverq个用java做的wms服务器,性能不敢恭维Q玩geoserver的时候接触了tilecahceq个开源YӞ目前跑啥版本׃清楚了,之前其研究了个明白Q知道自己需要的是什么,所以一切还是得自己写?br /> Ҏ来讲tilecache不实用的原因有多?
1.支持q多的cahce 存储方式Q什么google的数据库Qoracle的也有,虽然代码框架的好Q但很多东西都不用Q所以代码维护不够灵z?br /> 2.tilecache通过apache提供web的wms服务Q然后tilecahe里再h后端的geoserver服务Q生的cacheҎ他定 义的一个网gơ按x,y,z的烦引存储在文gpȝ里面Qƈ图形进行编码分cR这U实现ƈ没有问题Q但要知道这些cache出来的图像文件是那么的多?都零,有些囄q够不上一个文件系l基本的一个存储页大小Q所以会大量费I间Q由于文仉且多,Udq些文g也是个相当大的问题,一ơؓ了将q些 cahce tile文g从A机器拯到B机器然p?天的旉?br />
tilecache有这些不如我意的地方Q所以之前自׃考虑再写一个tilecache?backendQ将渲染出来的东西直接存储进pgsql数据库,那以后只要导出数据库的tablespace可以了Q嗯Q的可行,也跑了一D|?br /> 最后还是决定放弃tilecahce了,毕竟wms自己已经实现了,要再做个backend也是很简单,做完直接整合qwms服务器?br /> 我考虑采用sqlite来存储这些瓦片图形,׃sqlite处理多线E时天性有炚w题,多线E不能共享同一个连?connection),所以实现的时候在每个U程创徏了新的连接,开销是有一些的Q那比之前实时请求TileServer要快的多了?br /> 现在wms跑的很开心了Qcpu也不忙了Q就是篏M盘?br /> 一台机器上渲染的地囄片数据单独存储在一个文仉面,要部|到另外一台机器也很方便了Q只需要拷贝一下就可以?br /> 接着看看这个sqlite换成pgsqlQ看看性能哪个更强一?br /> python代码实现:
 1     def getBitmapTile3(self,renderTile,mapid,res,xy,size):        
 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 

记得I的时候在flex端写个自动跑地图的程序,不能让机器闲着Q没事的时候把全国地图的瓦片自动生一下,免得在访问地囄l的时候再M生瓦片!











攑ֱ阿狗 2011-07-11 22:34 发表评论
]]>
对Apache Server Status的启?/title><link>http://m.shnenglu.com/socketref/archive/2011/05/27/147404.html</link><dc:creator>攑ֱ阿狗 </dc:creator><author>攑ֱ阿狗 </author><pubDate>Fri, 27 May 2011 13:05:00 GMT</pubDate><guid>http://m.shnenglu.com/socketref/archive/2011/05/27/147404.html</guid><wfw:comment>http://m.shnenglu.com/socketref/comments/147404.html</wfw:comment><comments>http://m.shnenglu.com/socketref/archive/2011/05/27/147404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/socketref/comments/commentRss/147404.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/socketref/services/trackbacks/147404.html</trackback:ping><description><![CDATA[<div><p align="left"><strong><span style="font-family: 宋体;">?/span></strong><strong>Apache Server Status</strong><strong><span style="font-family: 宋体;">的启?/span></strong></p> <p align="left"><span style="font-family: 宋体;">?/span>Apache<span style="font-family: 宋体;">的状态管理的模块?/span>LoadModule status_module modules/mod_status.so<span style="font-family: 宋体;">Q所以这个需要有Q然后打开下面的配|?/span></p> <p align="left">ExtendedStatus On</p> <p align="left"><span style="font-family: 宋体;">配置</span>Apache Server Status<span style="font-family: 宋体;">的权?/span></p> <p align="left"><location /server-status></p> <p align="left"><span>         SetHandler server-status</span></p> <p align="left"><span>         Order Deny,Allow</span></p> <p align="left"><span>         Deny from all</span></p> <p align="left"><span>         Allow from .foo.com</span></p> <p align="left"></location></p> <p align="left"><span style="font-family: 宋体;">打开查看的话׃?/span>http:// your.server.name/server-status<span style="font-family: 宋体;">来访问,注意</span>VH<span style="font-family: 宋体;">?/span>apache<span style="font-family: 宋体;">要设|在一?/span>VH<span style="font-family: 宋体;">?/span>,<span style="font-family: 宋体;">不然你分不清是那个地址来查看看q个信息</span>.<span style="font-family: 宋体;">?/span>ExtendedStatus<span style="font-family: 宋体;">不能攑֜</span>VH<span style="font-family: 宋体;">?/span>.</p> <p align="left"> </p></div><img src ="http://m.shnenglu.com/socketref/aggbug/147404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/socketref/" target="_blank">攑ֱ阿狗 </a> 2011-05-27 21:05 <a href="http://m.shnenglu.com/socketref/archive/2011/05/27/147404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache gzip 配置http://m.shnenglu.com/socketref/archive/2011/01/15/138583.html攑ֱ阿狗 攑ֱ阿狗 Sat, 15 Jan 2011 13:53:00 GMThttp://m.shnenglu.com/socketref/archive/2011/01/15/138583.htmlhttp://m.shnenglu.com/socketref/comments/138583.htmlhttp://m.shnenglu.com/socketref/archive/2011/01/15/138583.html#Feedback0http://m.shnenglu.com/socketref/comments/commentRss/138583.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/138583.html2009-08-31 10:38:15
标签Qapache 配置 gzip
版权声明Q原创作品,谢绝转蝲Q否则将q究法律责Q?br>1、conf/httpd.conf
1) L#LoadModule headers_module modules/mod_headers.so前面的注?Q?br>2) dLoadModule deflate_module modules/mod_deflate.soQ?br>3) L#Include conf/extra/httpd-vhosts.conf前面的注??br> 
2、conf/extra/httpd-vhosts.conf
在VirtualHost中添?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>
例如Q?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>

攑ֱ阿狗 2011-01-15 21:53 发表评论
]]>
swbox 地图渲染完成基本功能http://m.shnenglu.com/socketref/archive/2010/11/08/132907.html攑ֱ阿狗 攑ֱ阿狗 Sun, 07 Nov 2010 17:20:00 GMThttp://m.shnenglu.com/socketref/archive/2010/11/08/132907.htmlhttp://m.shnenglu.com/socketref/comments/132907.htmlhttp://m.shnenglu.com/socketref/archive/2010/11/08/132907.html#Feedback1http://m.shnenglu.com/socketref/comments/commentRss/132907.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/132907.html其中借鉴了geoserver的服务模式,ogc的SLD风格配置Qtilecache开源代码的核心Q现已用c++完成q些功能Q?br>q行效率可谓比geoserver快了好几个数量
未加入道路和多边形文本标注,正在调整标注法和逻辑Q?*.xml控制地图Qmapsld.xml定义层样式风?br>
E序演示Q?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





攑ֱ阿狗 2010-11-08 01:20 发表评论
]]>
webgis - china 12U羃?地图http://m.shnenglu.com/socketref/archive/2010/05/16/115517.html攑ֱ阿狗 攑ֱ阿狗 Sun, 16 May 2010 09:08:00 GMThttp://m.shnenglu.com/socketref/archive/2010/05/16/115517.htmlhttp://m.shnenglu.com/socketref/comments/115517.htmlhttp://m.shnenglu.com/socketref/archive/2010/05/16/115517.html#Feedback0http://m.shnenglu.com/socketref/comments/commentRss/115517.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/115517.htmlhttp://118.126.7.153/maps/test_map.html
12U别采用tilecache产生囑֝到postgres存储,l制q程p?2?真希望有量I间和更多的机器供我使用?br>



攑ֱ阿狗 2010-05-16 17:08 发表评论
]]>
发布中国囑ֈweb的开发经?/title><link>http://m.shnenglu.com/socketref/archive/2010/04/12/112299.html</link><dc:creator>攑ֱ阿狗 </dc:creator><author>攑ֱ阿狗 </author><pubDate>Mon, 12 Apr 2010 03:18:00 GMT</pubDate><guid>http://m.shnenglu.com/socketref/archive/2010/04/12/112299.html</guid><wfw:comment>http://m.shnenglu.com/socketref/comments/112299.html</wfw:comment><comments>http://m.shnenglu.com/socketref/archive/2010/04/12/112299.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/socketref/comments/commentRss/112299.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/socketref/services/trackbacks/112299.html</trackback:ping><description><![CDATA[考虑shp格式的地图数据发布到webgis上去的想法有一D|间了Q正好有I闲旉便忙开来,没想到期间遇C诸多的问?br><br>1.开发工? <br>Geoserver,Openlayer,Ext-js,Postgres/Postgis,Python2.6,PIL,TileCache<br>2.地图数据<br>我的地图数据?8q的全国地图Q按每个省市分隔开来,每个省市又分了若q个囑ֱ文gQ格式是mapinfo的TabQ容?0G<br>׃没有全国大比例图Q在偶然的一个机会从|上下蝲C份C/S的监控系l,没想到安装目录内有一份全国图Q就是比例不高?br>3.处理q程<br>1.Tab转换成shp: Ogr工具可以完成q两U格式的转换Q编写python脚本可以L处理?br>  在{换数据之前需要提醒的是,发现在处理多边Ş囑ֱӞq个多边形图层ƈ不是单的多边形,也就是那Umapinfo允许存在polygon和pline的图层,q将D之后的导入空间数据库的失败,因ؓpostgis要求每个囑ֱ数据cd必须是一致的Q不能存在多U类型,所以编写mapbasic脚本Q将q些pline对象从这多边形图层中剔去卛_?br>2.数据校验Q q个q程非常重要QQ何提供的的矢量数据都有可能存在错误数据,所以第一步必要修复q些可能存在的错误,工具是QrcGis,使用其工具对每个省市的每个图层文件进行修复?br>3.导入I间数据库: ~写脚本Q将shp数据{成sql文gQ此时必L意空间数据库的字W编码与sql数据字W编码要d或者能够自动{换。pg2sq׃转换成sqlӞ׃shp数据中某些囑ֱ表存储的字符~码不统一D产生的非法的sql数据,所以必dq些数据q行修正Qƈ采用ultraedit将数据q行转码成数据的字符集类型,我用的是utf-8.<br>4.数据分离Q?׃提供的全国地理数据是没有Ҏ应用来分层的Q所有的道\都合在同一个叫road的图层内Q然后通过属性来区分道\的别,׃我们在控制显C道路时是需要分层分U别的,所以必dq些数据要分L不同的道路图层,道\?0U别Q?-9Q,~写脚本每个省市的道\切割成road_?10U道路层(select into卛_搞定)?br>同样Q除了道路之外还有其他的比如xQPOI对象{都需要进行分割到不同囑ֱ以便更精的现实控制?br>5.配置GeoserverQ?数据都有了,接下来就是配|绘制引擎了。Geoserver提供WFS,WMS服务Q性能一般,׃是java开发的。不?721Q配|了最新的I5LQ将java虚拟机的内存讄的最大,postgis的数据库内存也够调大。手工添加了1Q?个图层到geoserverQpreview一下,okQ?br>接下来编写控制这些图层的SLD了,q些׃好些旉学习和开发(学习sldҎ以前开发嵌入式地图引擎风格配置也是一U帮助,之后的嵌入式地图引擎也全部用sldq行配置了!Q?br>׃全国数据?1个省市,每个省市都配|了21个图层,所以要人工11加到geoserverq真是很大的问题Q不q没关系Q有python在手Q然后对geoserver的配|文件研I了一把便写了脚本几百个囑ֱ全加了进去,然后这些图层按省市q行分组Q再ơPreviewQokQ?br>6.Cache Tile生成: 使用qGeoWebCacheQ发现很多地方实在不好理解,q好扑ֈ了TileCacheQ代码也Ҏ修改Q研MTileCache代码之后修改了N处地方,把效率提高了10倍以上。现在的问题在于Tilecache实现了Disk Cache,Memory Cache,但就是没有DB cacheQ每个tile创Z个文Ӟ如果q些文g很小Q有的甚x几十字节也要费一个文件块I间Q效率不高,如果采用db的话I间p节省很多Q等以后有了旉自己~写一个后端ؓpostgres的Tile Cache吧?br><br>Tile Cache生成有些问题要注意:<br>Q? I白tileQ ׃我设|的l制讄的BBox非常大,所以在l制的时候有些空白区域也提交给geoserverq行处理Q这h费了处理旉Q同时这些生的规格图块大大占据了盘I间Q所以修改的代码不存储q些I白tileQ仅仅存储这些tile的文件名Uͼ而不保存内容<br>Q? tilecache的ResolutionsQZoomLevelsQBBox和Openlayers的属性必MP否则Opnelayers无法昄正确的tile<br>3. tile怺: 同样是空白区域的l制Q如果每ơ都提交lgeoserver的话Qgeoserver根据配|的layerȝ交ƈl制一ơ,q就完全没有必要的,我的解决方式是提前?1个省市生他们的MBRQ然后再tileq行提交lgeoserver之前Q将h的tile的bbox与这些省市的mbrq行怺试Q只有相交的囑ֱ才送入geoserverl制<br>4. 大网格绘Ӟ 每次?56×256的规格给geoserverl制全国囄话效率实在太低,之后修改?048×2048规格Q整体的l制效率上升了n倍,l制完了之后采用split_tile.py这些大块切割成256规格的小块,必须注意产生的序?br><br>写得好篏<br><br><br><br><img src ="http://m.shnenglu.com/socketref/aggbug/112299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/socketref/" target="_blank">攑ֱ阿狗 </a> 2010-04-12 11:18 <a href="http://m.shnenglu.com/socketref/archive/2010/04/12/112299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python::SocketServerhttp://m.shnenglu.com/socketref/archive/2010/02/15/107912.html攑ֱ阿狗 攑ֱ阿狗 Mon, 15 Feb 2010 15:42:00 GMThttp://m.shnenglu.com/socketref/archive/2010/02/15/107912.htmlhttp://m.shnenglu.com/socketref/comments/107912.htmlhttp://m.shnenglu.com/socketref/archive/2010/02/15/107912.html#Feedback0http://m.shnenglu.com/socketref/comments/commentRss/107912.htmlhttp://m.shnenglu.com/socketref/services/trackbacks/107912.html
BaseServer: 定义基础服务器接口,q些功能接口提供l子cȝѝ同时提供服务处理的骨架
   serve_forever()  循环调用 handle_request()
   handle_request()  调用子类的get_request() Q在tcpServer时实则进行accept()应答; 验证处理 verify_request(); 
             最l处理请?process_request()Q?br>   verify_request()   虚函?
   process_request()  虚函敎ͼq个函数q没有直接在BaseServer的子cTcpServer中被重蝲Q而是在TcpServer的派生类中通过另一个父cL?br>玎ͼ比如 ThreadingTCPServer的基cThreadingMixIn.process_request()实现了此功能函数
   finish_request(request, client_address) 执行一ơ完整的socket数据d处理Q如果是ThreadMixInTcpServer产生的requestQ这个方法内必须实行循环dsocket数据,直到socket关闭?此处 request 是 socket对象)
 def finish_request(self, request, client_address):
        
"""Finish one request by instantiating RequestHandlerClass."""
        self.RequestHandlerClass(request, client_address, self)
   在finish_request里面便将dsocket数据的Q务扔l了RequestHandlerd理了Q代码可以蟩q去看了
##---------------------------------------------

TcpServer:  tcp服务?br>   __init__(self, server_address, RequestHandlerClass) 需要提供服务侦听地址和请求处理类对象
   server_bind() l定服务器地址
   server_activate() ȀzL务器
   server_close()  关闭服务?
   fileno()  q回服务器socket的句柄fd~号
   get_request() 接收应答accept()
   close_request(request) 关闭socket,request即ؓsocket对象
 
三种输出处理方式: d方式、线E处?ThreadingMixIn)、进E处?ForkingMixIn)

ThreadingMixIn: U程模型
   process_request( request, client_address) 求的链接创徏新的U程,在创建线E时直接指定U程入口和参?
      
import threading
= threading.Thread(target = self.process_request_thread,
     args 
= (request, client_address))
if self.daemon_threads:
  t.setDaemon (
1)
   process_request_thread() U程处理socket入口Q负责接收数据,代码实现有点l,看看代码
def process_request_thread(self, request, client_address):
        
try:
            self.finish_request(request, client_address)
            self.close_request(request)
        
except:
            self.handle_error(request, client_address)
            self.close_request(request)
    ThreadingMixIn其实是U程代理Q还是调用finish_request()q入处理tcp数据的@环,处理完成便close_request()。但是finish_request和close_requestq未在ThreadingMinxIn内定义,在哪里呢Q?通过研读ThreadingTcpServer,原来通过ThreadingTcpServerq个finish_request又跑回了BaseServer.finish_request()

ThreadingTCPServer(ThreadingMixIn, TCPServer) 装配成线E池处理的tcp服务?br>  

BaseRequestHandler:  h处理基础对象Q提供统一的行为接口实现处理socket数据?BaseRequestHandler比较好玩Q在构造函数内完成了所有的操作Q见代码Q?
def __init__(self, request, client_address, server):
        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
   setup()对应的子cMq行初始化处?br>   self.handle()  直接调用子类的处理函敎ͼ可以参?BaseHTTPRequestHandler(SocketServer.StreamRequestHandler)::handle()


StreamRequestHandler(BaseRequestHandler) 式socket处理c?br>   setup() 讄好socket对象和读写文件句?rfile/wfile


HTTPServer(SocketServer.TCPServer) http服务?br>
BaseHTTPRequestHandler(SocketServer.StreamRequestHandler) 式的请求处理类
   handle() 处理入口Q在基类BaseRequestHandle()的构造函C直接调用
   handle_one_request() 如果不是处理一ơ则q回false。接收一ơsocket数据Q解析parse_request(),调用对应的do_xxx事g

python 的daemonU程Q?br>如果一个进E的ȝE运行完毕而子U程q在执行的话Q那么进E就不会退出,直到所有子U程l束为止Q如何让ȝE结束的时候其他子U程也乖乖的跟老大撤退呢?那就要把那些不听话的|ؓ听话的小弟,使用U程对象?font color="#99cc00">setDaemon()ҎQ参Cؓbool型?font color="#99cc00">True的话׃表你要听话,我老大Q主U程Q扯|你也要跟着撤,不能拖后ѝ如果是False的话׃用那么听话了Q老大允许你们在外军命有所不受的。需要注意的?font color="#99cc00">setDaemon()Ҏ必须在线E对象没有调?font color="#99cc00">start()Ҏ之前调用Q否则没效果?/span>
  



攑ֱ阿狗 2010-02-15 23:42 发表评论
]]>
Ұ¾þһ| Ʒþþþ| ޾Ʒþþþþ| þݺҹҹ | ޹Ʒþþò| ŷƷ99þ| Ʒþþþþ | þþþƷ| ھƷþþþþþþ| þ޾ƷAV| ŷƷרþ| þþƷav鶹ɫ| þҹɫ˾ƷС˵| ձþþþƷĻ| һһþۺϺݺ| ݺɫþþۺ| 2020þþƷ| þ99ھƷ| þþžѸƵ| ƷþþĻ| þþƷAVDz18| 99þþƷѾƷ | žžƷ99þþ㽶| Ʒþþþþþþþ| ޹ƷþõӰŷ| ۺϾþһ | ŷ˼Ծþ| ھƷþþþӰԺվ | ŷ糱þþXXXXx| ŷ龫Ʒþþþþþ| ɫۺϾþþþ| Ʒʾþþþ999Ұ| ޹Ʒþþž| þ99Ʒþþþþˮ| ƷƷھþø| 㽶þҹɫƷС˵| þ99ۺϾƷ| ձǿƬþþþþAAA| ޾Ʒ׽þþþþ | ŷһþ| ŷþþþ9999|