2009-08-31 1 views
1

У меня есть онлайн-игра AJAX, которая вызывает сервер несколько раз в секунду. AJAX-вызовы хороши, но все же они медленнее, чем обычные соединения TCP/IP-сокетов.Могу ли я улучшить AJAX с помощью Flash?

Так что мои вопросы: могу ли я улучшить свою игру, используя флэш-память - какое-нибудь флэш-приложение для подключения к серверу? Или, может быть, есть какое-то решение с аддоном Firefox (70% моих пользователей использует Firefox)?

+0

У меня есть сомнение вопрос. Действительно ли связь AJAX медленнее, обеспечиваемая вспышкой? – Isaac

+0

AJAX по-прежнему отправляет дополнительные лишние данные, потому что это протокол без учета состояния. – Thinker

+1

Как вы определили, что вызовы ajax медленнее, чем соединения tcp/ip? Были ли переданы одни и те же основные данные? –

ответ

2

Просто случайно наткнулся этой новой библиотеки JS, которые могут быть полезны для вас (объявлено сегодня ajaxian):

Kamaloka

С их сайта:

Kamaloka-JS представляет собой реализацию протокола обмена сообщениями AMQP в родном JavaScript. Это настройка, которая будет использоваться с Orbited, но может использоваться с любой библиотекой, которая создает TCPS-файлы в браузере, похожие на Orbited.


Другое подобное решение (с использованием вспышки): amqp-js

+0

Спасибо за щедрость! –

+0

Это именно то, что я искал :) – Thinker

3
  1. Создание флэш-файла, который обрабатывает вашу игру звонки через встроенный XMLSocket объектов
  2. Скрыть что вспышку в HTML (ширина/высота = 1)
  3. Использование flash.external.ExternalInterface.call из флэш-памяти для вызова функций JS

Связь с Flash/JS через ExternalInterface очень быстро, что позволяет обрабатывать скорость, предоставляемую ответами сокетов.

Надеюсь, это поможет.

+0

+1 - для того, чтобы предложить способ для вызова вспышки js для повторного использования того, что уже существует. –

+0

Проблема в том, что я совсем не знаю Flash, и я ищу уже работающее решение. – Thinker

+0

@Thinker - вы мыслитель, поэтому вы могли бы;), но серьезно, этот сайт не посвящен новичкам вопросов, и поэтому у нас нет начальных ответов и всех деталей. Ответы Макрама кажутся просветляющими, так что вперед! – Isaac

2

Перед выполнением этой оптимизации вы можете сначала создать профиль, чтобы гарантировать, что медленная часть - это соединение сокета между javascript и сервером.

Я имею тенденцию профилировать серверную сторону, а затем профиль с javascript на сервер и обратно, а разница связана с подключением сокета.

После того, как у вас есть некоторые цифры, любые другие изменения, которые вы делаете, например, что предлагает Макрам, могут быть профилированы, чтобы увидеть, есть ли достаточное улучшение.

Если вызовы к серверу являются своего рода опроса можно посмотреть при использовании Comet, чтобы помочь с этим: http://en.wikipedia.org/wiki/Comet_%28programming%29

0

Подобно тому, что сказал Джеймс Блэк, не прыгать прямо вперед и отрываться заменить все, Flash, прежде чем вы выясните, где узкое место (если оно существует).

Я думаю, вы могли бы также быть пропущены некоторые части изображения, судя по некоторым из комментариев ...

Я хочу, чтобы выложить все слои в ваших сообщениях, просто чтобы сделать вещи ясно - точка , его маловероятно, ВСЕ это проблема, и вы лучше смотрите на проблемный слой.

  1. Код клиента - в настоящее время javascript, который асинхронно вызывает следующий уровень. Если вы оптимизируете Flash, эта часть может быть более отзывчивой, а ее «богаче».
  2. TCP/IP (обычно не ниже этого) - это ВСЕГДА с сохранением состояния, поскольку TCP - stateful. По крайней мере, на уровне соединения ... Это означает, что обычно TCP-соединение остается открытым в течение длительного времени, и вы не открываете новый по каждому запросу. Вы не будете изменять это в приложении для браузера ...
  3. HTTP-stateless в принципе, но, как правило, обход через некоторые формы файлов cookie и серверную сессию. Кроме того, это не эффективный протокол MOST, особенно для двоичных данных, поскольку он основан на тексте и накладные расходы. Хотя технически возможно пропустить этот протокол, его крайне не рекомендуется делать в браузере, потому что (а) его неожиданно с точки зрения пользователя и (б) его не очень дружелюбный к брандмауэру.
  4. XML - если вы обнаружите, что ваше узкое место находится в количестве переданных данных, вы можете просто отключить формат полезной нагрузки, поскольку XML довольно подробный. Например, JSON была бы отличной альтернативой здесь. Или, может быть, просто обрезать XML-схему ...
  5. Приложение на стороне сервера - часто узкое место будет здесь, независимо от того, что происходит по течению.

Итак, подведем итог - переход вашего клиента на Flash может иметь две возможные выгоды: сам клиент может работать быстрее (в зависимости от вашего клиента), и он позволяет вызывать сокеты непосредственно в обход 3 выше (http) , Опять же, обратите внимание, что второе преимущество в лучшем случае сомнительно: преимущество сомнительно, и есть явные недостатки.
Если узким местом является код отображения клиента, вам лучше переключиться на JSON (или другой формат данных) или оптимизировать код сервера. Как только вы профилируете и выясняете, где проблема, вы лучше знаете, где сосредоточить свои усилия. Мне очень маловероятно, что Flash справится с этим. (опять же, поскольку это игра, вам может понадобиться улучшенный дисплей).

+0

Все, что вы написали, является умным. Моя игра посылает часто небольшой объем данных. 50-250 байт. Накладные расходы HTML составляют около 200% или более. Сервер создает ответ в 1-2 мс, пинг на сервер - 60 мс, а ответ AJAX - около 120 мс. Поэтому я думаю, что сдержанная связь поможет, но я воевал, кто-то уже сделал что-то подобное. – Thinker

+0

Опять же, что касается связи, вы уже открываете соединение TCP. Похоже, что медленность возникает из-за накладных расходов (вы, вероятно, отправляете несколько K по кабелю каждый запрос, когда вам нужно намного меньше этого) и, возможно, также подпрограммы XML-синтаксического анализа. Моя конкретная рекомендация для вас - начать с избавления от XML, попробовать JSON или что-то еще. Не беспокойтесь, чтобы вырезать HTTP, что не стоит компромисс (но вы можете определенно оптимизировать его). Кстати, вы не указали, сколько данных возвращается? – AviD

+0

Я использую JSON, возвращаемое значение составляет около 20 байт. И я вижу, что существует разница между ping server.com -l 50 и ping server.com -l 500 или 1000. Поэтому я отправляю 50 или 100 данных и получаю время отклика, например, от ping server.com -l 1000 – Thinker

0

Если вы сделаете это, убедитесь, что вы сделали что-то разумное, когда пользователь имеет прокси-сервер , даже если это просто сообщение, указывающее пользователю, что прокси-серверы не поддерживаются.

Прокси так легко забыть.

Смежные вопросы