隨筆 - 1  文章 - 37  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          test

          搜索

          •  

          最新評論

          20100819
          完成以精武館平臺為中心的跨域登錄模塊。
          精武館圍棋譜頁面重新設(shè)計(jì)

          20100810
          一個(gè)重要的計(jì)劃正在實(shí)施!

          精武館第一個(gè)生產(chǎn)版本,與2010-08-08上線


          20100808
          圍棋打譜加入聲音
          修復(fù)圍棋幾個(gè)bug

          20100807
          圍棋模塊新增功能:
          1. 進(jìn)入點(diǎn)目模式后,啟動Timer,2分鐘后自動完成點(diǎn)目,每30秒提醒一次
          2. 完成點(diǎn)目時(shí),有30秒的時(shí)間選擇是否接受點(diǎn)目結(jié)果,30秒后自動選擇繼續(xù)走棋
          3. 一個(gè)請求(求和,點(diǎn)目,悔棋),如果被拒絕,則本輪無法再發(fā)起該請求


          20100802
          精武館已經(jīng)通過所有重要測試:
          1. 客戶端:
              1). 無內(nèi)存泄露
              2). 即便是IE6,也不會很卡
              3). 主流瀏覽器兼容
          2. 服務(wù)器端:
              1). 以房間為單位的服務(wù)器集群,可容納至少10萬人同時(shí)在線
              2). 在百萬級數(shù)據(jù)下所有查詢操作均在0.2秒以內(nèi)(未測試千萬數(shù)據(jù))
              3). 緩存,全文檢索均工作正常,并能很好的緩解數(shù)據(jù)庫壓力


          20100801
          Hibernate Search大數(shù)據(jù)手動建立索引
          數(shù)據(jù)庫:Mysql
          64萬條數(shù)據(jù),創(chuàng)建索引結(jié)果:
          2010-08-01 17:33:48,522   INFO org.hibernate.search.impl.SimpleIndexingProgressMonitor:74 - 643600 documents indexed in 340634 ms
          2010-08-01 17:33:48,522   INFO org.hibernate.search.impl.SimpleIndexingProgressMonitor:77 - Indexing speed: 1889.418 documents/second; progress: 99.99922%
          2010-08-01 17:34:10,149   INFO org.hibernate.impl.SessionFactoryImpl:935 - closing

          創(chuàng)建索引的代碼:
          FullTextSession fullTextSession = Search.getFullTextSession(getSession());
                  fullTextSession.createIndexer().
                  batchSizeToLoadObjects(
          40).
                  threadsForSubsequentFetching(
          2).
                  threadsToLoadObjects(
          2).
                  cacheMode(CacheMode.IGNORE)
                  .startAndWait();

          配置:

           

          <property name="hibernateProperties">
                      
          <props>
                          
          <!--   MySQL  -->
                          
          <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>

                          
          <prop key="hibernate.show_sql">false</prop>
                          
          <prop key="hibernate.hbm2ddl.auto">update</prop>
                          
          <prop key="hibernate.current_session_context_class">thread</prop>
                          
          <prop key="hibernate.jdbc.fetch_size">30</prop>
                          
          <prop key="hibernate.jdbc.batch_size">1000</prop>
                          
          <!-- The second level cache -->
                          
          <prop key="hibernate.cache.use_second_level_cache">true</prop>
                          
          <prop key="hibernate.cache.use_query_cache">false</prop>
                          
          <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                          
          <prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
                          
          <!-- Fulltext search -->
                          
          <prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</prop>
                          
          <prop key="hibernate.search.default.indexBase">/var/lucene/indexes</prop>
                          
          <prop key="hibernate.search.default.indexwriter.batch.max_buffered_docs">5000</prop>
                          
          <prop key="hibernate.search.default.indexwriter.batch.max_merge_docs">5000</prop>
                          
          <prop key="hibernate.search.default.indexwriter.transaction.ram_buffer_size">5000</prop>
                          
                      
          </props>
                  
          </property>




          <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
                  
          <property name="driver" value="com.mysql.jdbc.Driver" />
                  
          <property name="driverUrl"
                      value
          ="jdbc:mysql://192.168.1.100:3306/dev_weiqipu_com?useCursorFetch=true&amp;useServerPrepStmts=true&amp;useUnicode=true&amp;characterEncoding=UTF8" />
                  



          jvm參數(shù):

          -XX:MaxPermSize=128m
          -XX:PermSize=128m

          -Xmn100m 
          -Xms512m
          -Xmx512m


          由于用的筆記本,因此各項(xiàng)參數(shù)都不高,整個(gè)重建過程,jvm內(nèi)存使用率一直徘徊在250m左右


          20100726
          一段oracle造數(shù)據(jù)的存儲過程

          create or replace
          PROCEDURE "data_gen" IS
          buid 
          varchar2(32);
          huid 
          varchar2(32);
          BEGIN

          For   m   In   1..100   Loop

          select dbms_random.string('X',32into buid from dual;
          select dbms_random.string('X',32into huid from dual;

          For   i   In   1..1000   Loop

          INSERT INTO big_test 
              (gID,
              bUID, 
              hDATE, 
              hUID, 
              )
              
          VALUES
              ((
          select dbms_random.string('X',32from dual),
              buid, 
              sysdate, 
              huid, 
              );
          End   Loop;
          commit;

          End   Loop;

          END "data_gen";


          20100725
          配置好“精武館客服”(support # jingwuguan.com)郵箱
          一段mysql造數(shù)據(jù)的存儲過程
          SET GLOBAL log_bin_trust_function_creators = 1
          DROP FUNCTION IF EXISTS rand_string;
          DELIMITER $$
          CREATE FUNCTION rand_string(n INT)
          RETURNS VARCHAR(255)
          BEGIN
              
          DECLARE chars_str VARCHAR(100DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
              
          DECLARE return_str VARCHAR(255DEFAULT '';
              
          DECLARE i INT DEFAULT 0;
              
          WHILE i < n DO
                  
          SET return_str = CONCAT(return_str,SUBSTRING(chars_str , FLOOR(1 + RAND()*62 ),1));
                  
          SET i = i +1;
              
          END WHILE;
              
          RETURN return_str;
          END $$
          DELIMITER $$

          DELIMITER $$
          DROP PROCEDURE IF EXISTS `VACCOUNT_PARAMETER_PROC` $$
          CREATE PROCEDURE `VACCOUNT_PARAMETER_PROC`()
          BEGIN

            
          DECLARE iloop SMALLINT DEFAULT 0;
            
          DECLARE iNum MEDIUMINT DEFAULT 0;
              
            
          DECLARE gid VARCHAR(32DEFAULT 'a4028ebb812999ae220b';
            
          DECLARE gameId VARCHAR(32DEFAULT '';
            
          DECLARE Cur_account CURSOR FOR SELECT member_id FROM account;
            
            
          WHILE iNum<=10 DO
              START 
          TRANSACTION;
              
                
          WHILE iloop<=10 DO
                
                
          SET gameId = CONCAT(gid,rand_string(12));
                
              
              
          INSERT INTO dev_weiqi_jingwuguan_com.jwg_game_instances 
              (id, )
              
          VALUES
              (gameId, )

                  
                  
          SET iloop=iloop+1;
                
          END WHILE;
              
              
          COMMIT;
              
          SET iloop=0;
              
          SET iNum=iNum+1;
            
          END WHILE;
          END $$
          DELIMITER ;

          CALL `VACCOUNT_PARAMETER_PROC`();


          20100724
          1. 郵件服務(wù)器搭建完成;
          2. 完成3個(gè)郵件模板:
          注冊后的歡迎與激活郵件
          密碼重置郵件
          激活碼重置郵件
          3. 已測試郵箱:
          126, gmail, hotmail, 2個(gè)企業(yè)內(nèi)部郵箱


          20100712
          加強(qiáng)事務(wù)處理
          配置二級緩存
          增加一些小細(xì)節(jié),比如個(gè)人信息修改,圍棋耍賴投訴等

          20100615
          頁面方面的性能測試,主要是測試當(dāng)房間中玩家較多的情況下,高密度的頁面dom操作對性能的影響。
          房間數(shù)據(jù):房間包含50張桌子,每張桌子2個(gè)座位,房間可容納最多130個(gè)玩家。
          1. 開啟150個(gè)線程,每個(gè)線程模擬一個(gè)玩家,分別每隔2秒和5秒進(jìn)行一次進(jìn)入/離開房間
          2. 開啟150個(gè)線程,每個(gè)線程模擬一個(gè)玩家,分別每隔2秒和5秒進(jìn)行一次坐下/站起
          測試瀏覽器:ie8, firefox3.6
          ie的性能表現(xiàn)比較糟糕,F(xiàn)F還比較平穩(wěn),總體來說,在真實(shí)的環(huán)境中,即使房間人數(shù)爆滿,瀏覽器表現(xiàn)應(yīng)該會比較平穩(wěn)。

          20100521
          添加jquery element的remove替代方法,在child div較多的情況下,可提升性能數(shù)十倍。

          20100516
          解決內(nèi)存泄露問題(sIEve-0.0.8 + ie)
          1. Test Case: 進(jìn)入房間,刷新頁面100次,memory usage曲線平穩(wěn),無dom leak
          2. Test Case: 進(jìn)入/離開 房間100次(頁面不刷新),memory usage曲線平穩(wěn),無dom leak
          3. Test Case: 坐下/站起(打開/關(guān)閉圍棋窗口) 100次(頁面不刷新),memory usage曲線平穩(wěn),無dom leak

          jquery的ajax調(diào)用代碼段有內(nèi)存泄露(jquery1.4.2)
          try {
                      
          var oldAbort = xhr.abort;
                      xhr.abort 
          = function() {
                          
          if ( xhr ) {
                              oldAbort.call( xhr );
                          }


                          onreadystatechange( 
          "abort" );
                      }
          ;
                  }
           catch(e) { }


          20100504
          視頻:如何搭建本地平臺開發(fā)環(huán)境
          http://video.jingwuguan.com/public/builddevplatform/builddevplatform.html

          20100503
          介紹精武館的視頻制作完成
          part1: http://video.jingwuguan.com/public/intro/part1web/part1web.html
          part2: http://video.jingwuguan.com/public/intro/part2web/part2web.html

          20100418
          打包環(huán)境已創(chuàng)建完成

          20100330

          開發(fā)者論壇:https://groups.google.com/group/jingwuguan 

          Google Groups
          Subscribe to 精武館開發(fā)者論壇
          Email:
          Visit this group


          20100316
          平臺的抽象層代碼基本完成了,接下來是做一些項(xiàng)目管理的配套設(shè)施,包括清晰的模塊劃分,SVN,jira,論壇,mail等
          其實(shí)這是一件非常有趣的事。

          20100225
          簡單的注冊登錄步驟必然能吸引更多玩家,因此精武館將允許玩家使用以下網(wǎng)站的ID登錄:
          不過首次登錄還是需要填寫一些必要信息。
          1. 使用google帳號
          2. 使用msn帳號 - https://live.azure.com
          3. 使用yahoo帳號 - http://developer.yahoo.com/social/updates/
          4. 使用人人網(wǎng)帳號

          20091230
          精武館開始向開放式游戲平臺轉(zhuǎn)型,比原計(jì)劃要早,因?yàn)橐粋€(gè)人開發(fā)進(jìn)度太慢了,于是必須提前轉(zhuǎn)型。
          精武館將為開發(fā)者提供以下資源:
          1. 環(huán)境文檔,介紹精武館核心架構(gòu),介紹如何搭建開發(fā)環(huán)境和調(diào)試環(huán)境
          2. java-api文檔,如何擴(kuò)展使用精武館提供的各種java api
          3. javascript-api文檔,如何擴(kuò)展使用精武館提供的各種javascript api
          4. 開放“圍棋”模塊源代碼以供開發(fā)者參考
          5. 以maven依賴包的形式提供java api包

          開發(fā)者可以根據(jù)以上資源自由開發(fā)游戲模塊,由精武館付費(fèi)購買其源代碼。

          20091223
          利用googlecodes創(chuàng)建靜態(tài)資源的cache捷徑,表情和頭像等圖片資源,可以放到googlecodes上面(不是Hosting,兩者區(qū)別很大),然后在nginx中做代理和緩存配置,如下:
          proxy_cache_path  /var/www/cache levels=1:2 keys_zone=img-expression-cache:8m max_size=32m inactive=30d;  
          proxy_temp_path 
          /var/www/cache/tmp;

          server {
                  listen       
          80;
                  server_name  static.mydomain.com;
              expires 30d;
              access_log off;

              location 
          / {
                  proxy_pass      http:
          //yours.googlecode.com/svn/static/;
                      proxy_cache img
          -expression-cache;      
                  proxy_cache_valid  
          200 302 304  30d;
                  proxy_cache_valid  
          404      1m;
                  }
              }


          20091222
          javascript優(yōu)化基本完成,IE8下所有操作不超過100ms

          20091221
          javascript優(yōu)化:
          優(yōu)化前:build游戲大廳40個(gè)座位IE花費(fèi)280ms,F(xiàn)F花費(fèi)160ms
                          build空圍棋棋盤IE花費(fèi)350ms,F(xiàn)F花費(fèi)200ms
          優(yōu)化后:build游戲大廳60個(gè)座位IE和FF均花費(fèi)60ms左右
                          build空圍棋棋盤IE和FF均花費(fèi)30ms左右

          目前javascript已接近產(chǎn)品響應(yīng)級別。

          在VM虛擬機(jī)下跑的IE6,測試效果不佳,有待優(yōu)化。



          20091217
          圍棋游戲功能已經(jīng)做好了,等待測試,接下來計(jì)劃2周內(nèi)完成“觀戰(zhàn)”模式和開放服務(wù)——“打譜”。

          20091210
          開放式服務(wù)策略:
          以精武館為例,目前可提供的開放式服務(wù)有
          1. 棋類游戲打譜,客戶網(wǎng)站只需引入精武館相關(guān)棋類游戲模塊的打譜js,即可以在自己的網(wǎng)站上建立一個(gè)即時(shí)打譜的窗口。
          2. 即時(shí)通信頻道,客戶網(wǎng)站只需引入精武館的及時(shí)通信js,即可以在自己的網(wǎng)站上建立一個(gè)類似在線客服的即時(shí)通訊窗口。

          20091209
          精武館首個(gè)即將開放的API——圍棋打譜api
          它將幫助圍棋愛好者網(wǎng)站提供基于javascript/ajax的在線打譜功能,為圍棋愛好者提供更便捷的研究棋譜的方式。
          例如: 某網(wǎng)站 http://www.go.com是一個(gè)棋譜搜集網(wǎng)站,它需要使用精武館的圍棋api實(shí)現(xiàn)在線打譜功能,只需要引入精武館的goapi.js,并以某棋譜的http絕對路徑為參數(shù),創(chuàng)建并啟動apijs中的打譜對象,就可以實(shí)現(xiàn)在線打譜功能。

          20091124
          技術(shù)上已經(jīng)可以實(shí)現(xiàn)以游戲模塊或房間為單位的分布式多機(jī)集群,基于web的游戲大廳完全可以模擬出基于客戶端的游戲大廳。
          2篇Cometd的性能測試報(bào)告:
          http://wiki.exoplatform.com/xwiki/bin/view/WS/Cometd+Cluster+Bench
          http://cometdaily.com/2008/01/07/20000-reasons-that-comet-scales/

          20091122
          1. C-S通信做了些優(yōu)化,目前只要能較快的打開國內(nèi)各大門戶網(wǎng)站首頁,那么玩精武館就會很流暢。
          2. 采用cookie來判斷登錄,不過由于后臺使用的是memcached作為用戶對象的集群緩存,目前可以提供的同步方法為:當(dāng)用戶狀態(tài)改變時(shí),及時(shí)更新緩存對象。
          3.  頁面增加了一些元素,游戲結(jié)束時(shí)的計(jì)分部分(包含道具系統(tǒng))已經(jīng)差不多完工了,不過道具與積分/玩家的對象關(guān)系還需進(jìn)一步改善。
          4.  暫時(shí)取消google搜索框,它對頁面的打開速度有影響。

          20091120
          1. 加入后臺虛擬貨幣,積分,道具的對象系統(tǒng)
          2. 網(wǎng)速過慢的客戶端,會導(dǎo)致Cometd重置與服務(wù)器之間的連接,產(chǎn)生新的ClientId,導(dǎo)致Channel無效,也就是收不到來自服務(wù)器的p2p消息
          3. 精武館將能嵌入開放式平臺中(例如開心網(wǎng)或是Google Wave),使得玩家可以在它們之中任何一個(gè)平臺進(jìn)入精武館游戲。

          20091115
          1. 優(yōu)化ack通訊
          2. 加入在線人數(shù)統(tǒng)計(jì)
          3. 加入google自定義搜索,它將為站內(nèi)搜索提供幫助


          20091112
          1. 修正了游戲窗口ID查找的bug
          2. 玩家圍棋落子后,先顯示落子再提交ajax請求
          3. 修正了斷開連接時(shí)多層彈出框
          4. 取消了一個(gè)客戶端與服務(wù)器端的通道

          20091111
          圍棋:添加Pass
          添加Ack擴(kuò)展,可以支持離線消息以及server端丟包重發(fā)
          修正了Cometd-js中Reload時(shí)Ack的一處小BUG

          20091110
          當(dāng)游戲大廳的Cometd連接時(shí)才設(shè)置session過期時(shí)間,而不是登錄時(shí),這樣可以防止登錄后進(jìn)入大廳之時(shí)由于網(wǎng)速過慢而導(dǎo)致session過期,并且延長過期時(shí)間為20秒
          取消了ajax request的10秒超時(shí)限制,因?yàn)樵诰W(wǎng)速較慢的情況下,它的影響似乎很惡劣。
          添加了與服務(wù)器失去連接時(shí)的提示,由于客戶端是無狀態(tài)的,可以任意刷新。
          圍棋模塊需要先實(shí)現(xiàn)SGF導(dǎo)入,這樣可以方便測試點(diǎn)目,精武館圍棋的點(diǎn)目效果與QQ圍棋的點(diǎn)目效果差不多。
          研究圍棋的SGF讀寫功能,發(fā)現(xiàn)應(yīng)該為玩家提供這樣一個(gè)服務(wù):可以創(chuàng)建自己的棋譜庫,可以方便的管理并使用它們,而該棋譜庫又是精武館的開放資源。


          20091109
          由于要限制一個(gè)賬號同時(shí)只能登錄一個(gè)實(shí)例,目前使用的是session,10秒后過期。實(shí)際上也可以用cookie,用戶登錄時(shí)生成一個(gè)隨機(jī)ID,存入memcached,不過這樣就沒有辦法知道用戶何時(shí)關(guān)閉瀏覽器,不過這是一個(gè)代替session集群的最佳方案,可以考慮。
          本周的開發(fā)計(jì)劃為:完成圍棋模塊的基礎(chǔ)功能,包括:SGF讀入,點(diǎn)目,PASS,認(rèn)輸。
          posted on 2009-11-10 22:24 Phrancol Yang 閱讀(827) 評論(1)  編輯  收藏

          FeedBack:
          # re: 精武館開發(fā)日志 2010-04-07 15:41 周磊
          GOOD  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 金沙县| 交口县| 邯郸县| 永兴县| 云安县| 昌邑市| 曲松县| 德兴市| 丹凤县| 新安县| 禄丰县| 龙井市| 琼海市| 普安县| 镇远县| 定安县| 当阳市| 利川市| 习水县| 邵阳县| 成武县| 彭泽县| 五台县| 吴堡县| 安乡县| 玉环县| 新河县| 绥江县| 缙云县| 鲁甸县| 建昌县| 贵州省| 常熟市| 沅陵县| 航空| 杭锦旗| 云浮市| 边坝县| 镇巴县| 博客| 阿图什市|