|
wtusmchen :
用mapxtreme for java开发的时候大家都得碰到一个问题:创建MapJ对象 一般的处理方法是:接到新的客户端的请求则创建一个MapJ放到session中,下一个请求则只见取session来对地图操作 提出问题:取session没有问题,速度很快,但是创建MapJ是一个很费时的工作,一般在60~150毫秒之间(当然跟机器/数据量....有关),如果能仿照数据库连接池那样事先创建好一些MapJ,有新的连接时直接调用就可以了,提高了响应时间. 技术问题:数据库连接池是一个"有借有还"型,从池中获取连接使用后必须还回去,而Map池(存放MapJ对象)是"只借不还",因为MapJ在session中是持久化保持,直到客户端断开连接才释放 解决办法:创建一个队列,在服务器启动时就预先创建n(如20)个MapJ,另外创建一线程定时扫描队列(如3分钟扫描一次),如果发现队列长度小于n,则填满队列. 程序使用时直接从队列中取MapJ,如果队列为空则自己创建一MapJ 好处:减少创建MapJ的时间,提高响应效率!^_^
James.Liu :
MapXtreme for Windows有个mapxbroker的工具,就是干你说的工作,创建一个mapxserver的缓冲池;<BR> 在mapxtreme for Java下没有,因为java下创建一个mapj线程占用资源小,我觉得你说的方法很不错,但是可能自己写调度程序比较困难,看看能不能用Application Server启动多个MapXtreme服务来处理后台请求,以求提高效率。</P><P> 不错的主题,希望各位继续跟帖!
wtusmchen :
自我感觉思路不错,另外这么做不影响多clone几个应用,调度程序已经写好了,没什么问题!有机会可以发上来共享一下:)
wynton :
好想法,写出代码的话让大家测试测试如何?
wtusmchen :
已经贴上来了,可以下载看看:) http://www.mygis.com.cn/articles/11-3093-3093.htm |