我有两个用AIR创建的软件:服务器和客户端。无论是AS3还是AIR。

我想避免使用远程共享对象或使用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有效负载,就可以开始使用了。

而且,如果您认为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++
  }
}

08-06 04:57
查看更多