<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    深藍色心情

    過來聊聊~~~~

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      31 Posts :: 0 Stories :: 46 Comments :: 0 Trackbacks
    服務地址和接口已經更改,新的使用手冊在:http://www.guzzservices.com/2010/man_ip_service/
    一.功能介紹
     

    通過傳入的IP地址,返回IP所在的地理位置。如傳入“58.16.209.19”,返回“貴州省六盤水市 ”。 

    返回的地理位置又分為3種精確度,程序可以按照自身需要選擇。三種精確度分別為:地區(qū)(省直轄市級),城市(地市級),詳細位置。例如對于“58.16.209.19”,三種精度的值為: 

    Java代碼 
    1. 地區(qū):貴州     
    2. 城市:貴州省六盤水市    
    3. 詳細地址:六枝特區(qū)騰龍網吧  

    二.3行代碼實現地域查詢 

    Java代碼 
    1. //第1行,獲取IP反查服務(JSP中寫的)  
    2. IPLocationService ipService = (IPLocationService) GuzzWebApplicationContextUtil.getGuzzContext(session.getServletContext()).getService("IPService") ;  
    3.   
    4. //第2行,執(zhí)行查詢。findLocation方法傳入要查詢的IP地址。  
    5. LocationResult result = (LocationResult) ipService.findLocation("58.16.209.19").get() ;  
    6.   
    7. //第3行,按照精確度要求,讀取地理位置  
    8. System.out.println("城市:" + result.cityName) ;  

    三.性能如何? 

    上面的第1步需要獲取IP反查服務,此服務有3個實現客戶端,一個為遠程方法調用(phprpc協議實現,類似hessian的一個協議),一個是socket長連接,一個nio。 

    針對這兩種實現,在內網下進行性能測試。測試方法:單線程,串行執(zhí)行查詢請求。查詢IP:59.66.106.0,返回地理位置:清華大學。 

    性能測試結果: 

    PHPRPC實現:執(zhí)行1000次查詢,耗時1339ms。 

    Socket實現:執(zhí)行1000次查詢,耗時84ms;執(zhí)行10000次查詢,耗時843ms。 

    NIO socket實現:執(zhí)行1000次查詢,耗時115ms;執(zhí)行10000次查詢,耗時1247ms。 

    Socket長連接模式為連接池實現,可以配置多個socket并行計算。對于絕大部分的應用,應該都能滿足要求。PHPRPC為短連接,每次查詢都建立一個http連接進行查詢。 

    四.如何配置到我的系統(tǒng)中? 

    上面的IP反查為guzz的服務,因此需要應用程序首先將guzz框架配置進去。Guzz框架不具有應用侵入性,不會影響現有系統(tǒng)運轉。配置方法:http://code.google.com/p/guzz/wiki/TutorialConfig 

    Guzz框架整合完畢后,只需要將IP反查服務在guzz中聲明即可。聲明包含3步(以socket的IP服務為例): 

    1. 將IP反查的實現jar包放到項目lib中。Jar包在附件中,包含源代碼。 

    2. 在guzz.xml中增加此服務: 
    Xml代碼 
    1. <service name="IPService" configName="fundIPServiceSocketClient" class="org.guzz.service.dir.impl.socket.IPLocationServiceSocketClientImpl" />  

    3. 配置服務參數(guzz的properties文件): 
    Properties代碼 
    1. [fundIPServiceSocketClient]  
    2. pool.maxActive=5  
    3. host=services.guzz.org  
    4. port=11546  

    參數中包含連接池大小,服務地址和端口。 

    配置完服務以后,就可以按照上一節(jié)的方式進行IP反查了。如附件中的示例jsp實現。 

    五.LocationResult介紹 

    執(zhí)行查詢時,返回的是LocationResult對象,此對象有一些方法和變量按照不同精確度和用途存儲地理信息。LocationResult介紹: 
    Java代碼 
    1.       
    2. public class LocationResult implements Serializable {  
    3.       
    4.     /**如:對于國外地區(qū),值為“海外”;對于cityName中不包含省市信息的,如“清華大學”,值為地區(qū)名稱,如“北京”*/  
    5.     public String cityMarker ;  
    6.   
    7.     /**查詢地市級名稱,如:貴州省六盤水市*/  
    8.     public String cityName ;  
    9.       
    10.     /**詳細地址,如:六枝特區(qū)騰龍網吧*/  
    11.     public String detailLocation ;  
    12.       
    13.     /**地區(qū)名稱,精確到省;對于國外,統(tǒng)一為:海外*/  
    14.     public String areaName ;  
    15.       
    16.     /** 
    17.      * 返回標記后的城市名稱。此名稱用于進行程序內的城市匹配,不用于對網友顯示。 
    18.      */  
    19.     public String getMarkedCityName(){  
    20.         if(cityMarker == null){  
    21.             return cityName ;   
    22.         }else{  
    23.             return cityMarker + cityName ;  
    24.         }  
    25.     }  
    26.       
    27.     public String toString(){  
    28.         StringBuilder sb = new StringBuilder() ;  
    29.         sb.append("cityMarker:").append(cityMarker)  
    30.           .append("cityName:").append(cityName)  
    31.           .append("detailLocation:").append(detailLocation)  
    32.           .append("areaName:").append(areaName) ;  
    33.           
    34.         return sb.toString() ;  
    35.     }  
    36.       
    37.     }  

    六.我的查詢請求不多,如何配置phprpc方式的查詢(不需要保持socket連接池)? 

    第1步:在系統(tǒng)中配置phprpc框架。詳細請參看:http://phprpc.org 

    第2步:將剛才guzz.xml中IPService服務換成PHPRPC實現: 
    Java代碼 
    1. <service name="IPService" configName="fundIPServiceClient" class="org.guzz.service.dir.impl.IPLocationServiceClientImpl" />  

    第3步:配置服務參數(properties文件): 
    Properties代碼 
    1. [fundIPServiceClient]  
    2. rpc.protocol=phprpc  
    3. rpc.serviceURL=http://services.guzz.org/service/IPService  

    七.其他: 

    1. JDK1.6+。如果使用JDK1.5,將源代碼在1.5下編譯即可。 

    2. 沒看明白如何配置服務? 看這里:http://code.google.com/p/guzz/wiki/TutorialService 

    3. IP反查可不可以異步執(zhí)行? 可以。ipService.findLocation(ip)返回的就是異步接口,在需要的時候調用get()即可;異步方法也支持超時,調用getOrCancel(5L, TimeUnit.SECONDS)可以讓接口最多等待5秒,隨后超時返回null。如果服務端故障,ipService.findLocation(ip)返回null。 

    4. 為什么會返回null? 沒有查詢到就返回null,null也很有用,如網易評論中的“火星網友”。 

    5. 支持spring IOC嗎? 支持。如果使用spring,IPService可以通過spring bean配置并進行注入。這樣只需要2行代碼即可。 
    附件下載地址:http://dl.javaeye.com/topics/download/08c5a323-0c58-3fd7-a2ca-07a4dd9aa199
    posted on 2010-06-22 11:59 深藍色心情 閱讀(3430) 評論(9)  編輯  收藏 所屬分類: Java

    Feedback

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-06-22 13:01 @joe
    ip反查--最終用到的.dat數據文件才是核心..是否權威,是否合法...?  回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-06-22 15:10 jackzhangyunjie
    這個東西的實際用途會是那里?
      回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-06-22 15:22 深藍色心情
    @jackzhangyunjie

    實用性很強。如匿名發(fā)帖都可以轉成“XXX地區(qū)網友”,現在新聞評論基本上都這樣了。另外廣告,日志系統(tǒng)等都存在大量地理分析的需求。  回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-06-22 15:24 深藍色心情
    @@joe

    核心數據文件在服務器端保存,如果多個項目使用,只需要維護或者購買一份即可。

    這是一個例子,services.guzz.org中用的.dat文件是純真IP數據庫,免費合法。準確度也還可以。
      回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-06-22 17:13 愛看小說網
    果然是不錯的代碼,謝謝,收藏了。  回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能[未登錄] 2010-06-25 14:10 海邊沫沫
    收藏

    還有這樣好的服務請多介紹下  回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-07-14 16:59 青格兒
    怎么我運行不了啊.總報空指針異常啊.
    LocationResult result = (LocationResult) ipService.findLocation("58.16.209.19").get() ; //這句報錯.

    你們都可以嗎?   回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2010-07-16 17:49 darkbluefeeling
    @青格兒
    需要可以訪問外網才能,你看看services.guzz.org:11546通不通。  回復  更多評論
      

    # re: 3行代碼,實現IP到地理位置的反查功能 2011-02-13 10:22 2134er
    32wedscfg  回復  更多評論
      

    主站蜘蛛池模板: 中文字幕亚洲码在线| 久久久久亚洲AV无码观看| 亚洲欧洲专线一区| 毛片免费观看视频| 亚洲综合成人婷婷五月网址| 国产桃色在线成免费视频| 久久精品国产亚洲av麻豆蜜芽| 8x成人永久免费视频| 亚洲宅男天堂a在线| 免费无码精品黄AV电影| 亚洲日韩精品无码专区加勒比| 女人让男人免费桶爽30分钟| 亚洲国产av玩弄放荡人妇| 国产乱色精品成人免费视频 | 欧洲一级毛片免费| 亚洲欧洲另类春色校园网站| 天天操夜夜操免费视频| 香港特级三A毛片免费观看| 亚洲一本大道无码av天堂| 免费一级不卡毛片| 久久精品国产亚洲av麻豆图片| 日韩在线天堂免费观看| 又硬又粗又长又爽免费看| 亚洲欧洲在线观看| 嫩草视频在线免费观看| 中文字幕的电影免费网站| 亚洲精品综合久久中文字幕| 青青青国产免费一夜七次郎| 一级特黄录像免费播放肥| 亚洲视频免费在线播放| 日本xxwwxxww在线视频免费| sihu国产精品永久免费| 亚洲性69影院在线观看| 亚洲成A∨人片天堂网无码| 国偷自产一区二区免费视频| va天堂va亚洲va影视中文字幕| 免费99热在线观看| 2021在线观看视频精品免费| 亚洲av日韩专区在线观看| 亚洲va无码va在线va天堂| 好先生在线观看免费播放|