Как получить XMLSocket на стороне сервера для AIR ServerSocket? - PullRequest
3 голосов
/ 28 июня 2011

У меня есть два программного обеспечения для создания с AIR: сервер и клиент.Как с AS3, так и с AIR.

Я хочу избегать использования большой архитектуры с удаленным общим объектом, использования BlazeDS или установки сервера Java / Python / ... посередине.

Чтобы избежать анализа данных сокетов на сервере и на стороне клиента, я подумал об использовании XMLSocket на стороне клиента: данные поступают способом, который уже анализируется инфраструктурой Flash.

Однако, когда я использую этот XMLSocket с AIR ServerSocket, событие «connect» возвращает мне необработанный Socket на стороне сервера.Поэтому мне нужно вручную управлять данными XML на стороне сервера.

Есть ли способ также использовать XMLSocket на стороне сервера для связи с клиентом?Некая хитрость для преобразования возвращенного Socket в XMLSocket?

Если есть библиотека AS3, которая управляет этим, я не нашел ее.

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Я полностью согласен с Адрианом в том, что код на стороне сервера в ActionScript будет плохим, синтаксически Java не так уж и намного лучше: многопоточная точка доступа, с множеством высокооптимизированных компонентов на стороне сервера.

Теперь, сказав, что: 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++
  }
}
0 голосов
/ 12 июля 2011

Не могу сказать наверняка о серверной стороне, но я бы предположил, что AS3 - плохой язык для сервера (просто из-за отсутствия многопоточной поддержки). В любом случае, вы можете попробовать привести его к новому объекту:

var myXMLSocket:XMLSocket = myOldRegularSocket;

По крайней мере, если выдается ошибка, эта ошибка может дать вам некоторое представление. Я советую не использовать сокеты XML, поскольку они пытаются замаскировать сокет, но на самом деле это только запутывает. Если вам нужно было только отправить данные XML, вы можете сделать это в почти идентичной структуре Socket.

Кажется, AIR содержит тип объекта ServerSocket. Это, вероятно, ваш лучший выбор.

Потратьте немного времени, чтобы узнать, как работают «сырые» сокеты, это сэкономит вам конвертирование данных повсюду. Регулярные выражения намного быстрее для анализа данных, чем xml, особенно если данные всегда динамические.

...