簡體   English   中英

如何在 AIR ServerSocket 的服務器端有一個 XMLSocket?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM