[英]How to have an XMLSocket on the server side for AIR ServerSocket?
我要使用 AIR 創建兩個軟件:服務器和客戶端。 AS3 和 AIR 都適用。
我想避免使用遠程共享 Object 或使用 BlazeDS 或必須設置 Java / Python / 服務器的大型架構。
為了避免在服務器和客戶端解析套接字數據,我考慮在客戶端使用 XMLSocket:數據以 Flash 框架已經解析的方式到達。
但是,當我將此 XMLSocket 與 AIR ServerSocket 一起使用時,“connect”事件會在服務器端返回一個原始 Socket。 所以我必須在服務器端手動管理XML數據。
有沒有辦法在服務器端也使用 XMLSocket 與客戶端通信? 一種將返回的 Socket 轉換為 XMLSocket 的技巧?
如果有管理它的 AS3 庫,我沒有找到它。
謝謝!
我完全同意 Adrian 的觀點,即 ActionScript 中的服務器端代碼會很糟糕,Java 在語法上沒有那么遠會好得多:熱點 JIT,多線程,具有許多高度優化的服務器端組件。
現在已經說過:XML Socket 為您提供了一個已解析的 XML,但通過網絡傳輸的內容仍然只是 XML 作為文本。 所以在性能方面,它與使用常規套接字並自己解析是一樣的。 這可以很簡單:
var text: Object = <data received>
var xml: XML = new XML(text);
因此,一旦您收到了完整的 xml 有效載荷,您就可以使用 go。
如果你認為 XMLSocket 可以在解析之前得到一個完整的 XML,我做了一些 XML Socket 的東西,得到了 XML 在兩個或更多的例子中交付:
...
private var xmlData: String = "";
private var errorCount: int;
...
private function dataHandler(e: DataEvent): void {
if (errorCount > 2) {
errorCount = 0;
xmlData = "";
}
try {
xmlData += e.data;
processMessage(XML(xmlData));
// valid XML, clear the buffer
xmlData = "";
} catch (error: Error) {
// otherwise log error and wait for the rest of the XML
log.error(error.toString());
log.error(e.data);
errorCount++
}
}
我不能肯定地說服務器端,但我想 AS3 對於服務器來說是一種糟糕的語言(僅僅是由於缺乏多線程支持)。 無論如何,您都可以嘗試將其轉換為新的 object:
var myXMLSocket:XMLSocket = myOldRegularSocket;
至少如果它拋出一個錯誤,這個錯誤可能會給你一些洞察力。 我建議不要使用 XML sockets,因為他們試圖掩蓋套接字,但實際上只是將其復雜化。 如果您只需要發送 XML 數據,您可以在幾乎相同的“套接字”結構中執行此操作。
似乎 AIR 包含一個“ServerSocket”object 類型。 這可能是你最好的選擇。
花點時間了解“原始”sockets 的工作原理,它將為您節省到處轉換數據的時間。 正則表達式解析數據的速度比 xml 快得多,尤其是在數據始終是動態的情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.