標籤:android winform style blog http color 使用 os
總體來說,如果是想做一個比較簡單的虛擬現實服務,拿sfs來做還是很方便的,省去了前期構造伺服器網路,實現資料庫介面,資料同步等等一些基礎功能的時間,可以一上來就直奔主題,開發自己項目相關的功能.
Sfs的介面封裝也比較簡單,基本上看到介面名就能知道是做什麼用的,參數是什麼意義,而且他的文檔也比較詳細,對於非伺服器開發專業人員也比較方便.sfs的定義也主要在此,比如他最早支援的flash用戶端api.
而隨著sfs的成功,也開始將目標轉向了目前新興的iphone, android, sillverlight, unity等 用戶端.這次使用c# client api做了一個winform測試程式,使用起來也是非常的方便.
第一次拿sfs做商業項目,也還是遇到了一些問題,總結一下,另外還有一些未完善的地方,後面再花時間繼續實現.
CustomLogin的處理在zone extension裡,必須先join room才能使用xt message.所以需要先寫一個zone extension,在這裡處理登入驗證,注意驗證成功後需要向用戶端發送room list, 用戶端必須收到room list訊息才能做後面的操作,這是sfs限制死了的.
本來我想在extension裡讓用戶端驗證成功後直接join room,未果,調試良久才發現,用戶端未收到room list,不能join room.
Sfs的user variables只支援bool, integer, string類型,其他類型的資料不能同步.這個問題困擾了我差不多一個小時,最後在用戶端一步步跟蹤屬性同步過程時才發現,其他類型的variable都被忽略掉了.
於是,為了同步float座標資料,我不得不加上了float.toString(),資料量又大了不少.
Sfs訊息定義的方式,不要像sample裡那樣,直接寫字串名字,改用枚舉或者常量定義.每個extension name和command name都只有一個位元組,在枚舉中也可以定義出128個,完全夠用.
這樣可以省不少頻寬佔用量,可以在client上開啟debug message開關,看一下一個簡單的訊息發送會佔多少位元組.
如果想同時在eclipse和netbeans下對一個項目進行開發,注意檔案編碼的問題.eclipse下建立的檔案預設編碼為gbk,netbeans下建立的檔案預設為utf-8,而在eclipse下匯入檔案時他並不會自動檢測檔案的編碼,所以,你需要在檔案的屬性裏手動設定一下編碼方式.另外,netbeans下要在檔案中顯示中文字元只能使用utf-8,使用gbk會出亂碼,如果出現此類錯誤,修改一下檔案編碼方式以及指定新的編碼即可.
要關於利用IDE編譯環境.在項目最開始的一周裡,我使用trace來進行調試,一次次的通過trace列印出中間變數,然後再修改代碼,再啟動伺服器,再看trace資訊……在我快要陷入崩潰絕望之時,終於,決定建一個好用的整合調試環境.在嘗試eclipse失敗後,我成功的在netbeans中打下了斷點,單kh步跟蹤,於是,整個世界變得清靜多了……
關於如何在netbeans中調試extension,可以參考我之前的一篇文章
sfs中伺服器與客戶關通訊的協議有三種:xml,json和raw string,使用json會比xml節省不少位元組,但其仍然佔用比較大的頻寬開銷.如果是資料互動量比較小的應用,這個問題不會太大,但對於即時戰鬥類MMO來說,可能會成為一個比較大的問題.嘗試了一下使用raw string的方式傳遞結構體,但是沒找到比較好的方法,以後有機會再繼續,如果可能的話,結合google proto buffer和raw string方式,將會是一個比較好的方案.
在處理extension message時,按照樣本所提供的方法,先取出cmd,然後使用equal的方式一個個進行比較,然後轉到對應的處理函數.對於訊息種類比較小的應用來說還沒發現問題,但是對於有大量自訂訊息的應用,這裡就需要修改一下了.
sfs的db extension目前看起來只能在當前線程中處理,並且是阻塞式的,暫時沒有嘗試使用多個線程操作資料庫,也沒有把資料庫操作改為非同步作業.這也是未來需要進一步改進的地方.
暫時不清楚SFS是否會為每個room開啟一個單獨的線程,或者是每個extension一個線程.如果zone裡房間數比較多的話,分多個線程處理也是需要的,未來也需要繼續考慮一下多線程的問題.
Sfs的實現是把一個room當成了一個廣播單元,這對於開房間類的遊戲來說沒有問題,但是如果相用它來做MMO就需要注意一下,因為user variables的同步是以整個room為單位的,也就是當一個房間裡人數達到幾百人甚至幾千人的時候,某個玩家的進入和退出房間訊息,屬性修改訊息的廣播量都會是巨大的.但是在沒有源碼的情況下想要修改這個不大容易,也就是限制了sfs的應用環境.
原文轉自:http://www.cppblog.com/helloqing ... 0/08/08/122648.html