![]() |
XMLSocket странное поведение
Привет.
Есть проблема которую никак не получается понять. Для наглядного понимания проблемы были написаны 2 простых приложения - клиент на AS3 и сервер на питоне, код которых выложен ниже. Запускаем одновременно 2 клиента, располагаем их так, чтобы было видно оба окна, нажимаем connect и там и там. После чего зажимаем в одном из клиентов любую кнопку. Что должно происходить: Клиент в котором зажата кнопка отправляет серверу сообщение “some data”, после чего сервер пересылаем его всем клиентам назад. После чего каждый клиент двигает кнопку connectButton, и выводит сообщение в лог с временем минуты:секунды:милисекунды. Что происходит не так: В клиенте который отсылает сообщение движение происходит плавно, а во всех остальных клиентах движение дергается. Это происходит потому, что сообщения до них доходят позже чем до клиента через который происходит отсылаемое сообщение. Причем если запустить три клиента (назовем их A, B, C), и отсылать с A то время у B и C будет одинаково. Почему эти сообщения доходят позже до остальных клиентов? Хотя стоит сказать что винда плохая и на ubuntu linux 10.04 , Chrome 12.0 , flash player 10.3 все плавно, оба клиента запускаються в отдельных окнах хрома. скрин винда скрин линукс убунты Листинг времени из сервака Четыре клиента одновременно [16:29:33.280858] 62.140.224.1 >> some data [16:29:33.280912] 87.249.9.98 << some data [16:29:33.280970] 87.249.9.98 << some data [16:29:33.281025] 87.249.9.98 << some data [16:29:33.281079] 62.140.224.1 << some data [16:29:33.323267] 62.140.224.1 >> some data [16:29:33.323326] 87.249.9.98 << some data [16:29:33.323386] 87.249.9.98 << some data [16:29:33.323440] 87.249.9.98 << some data [16:29:33.323493] 62.140.224.1 << some data [16:29:34.123435] 62.140.224.1 >> some data [16:29:34.123525] 87.249.9.98 << some data [16:29:34.123593] 87.249.9.98 << some data [16:29:34.123648] 87.249.9.98 << some data [16:29:34.123702] 62.140.224.1 << some data Код клиента AS3 Код AS3:
Код:
from twisted.internet import reactor |
Возможно в Виндовс так многозадачность реализована, что окна в фоновом режиме обслуживаются "по возможности", а не "моментально"...
|
Нет, все хуже :)
Если запустить все это с двух машин (A и B), в обоих окнах эти приложения будут не в фоновом, и с А слать мессаги, то в B все равно будет тот же негативный эффект. |
Вы не сможете гарантировать синхронность таким образом. Хотите синхронности — придется делать что-то типа этого: http://habrahabr.ru/blogs/gdev/123883/
|
Да да, читал накануне.
Вопрос не в том как добиться синхронизации. Вопрос в том почему время настолько запаздывает? Если делать синхронизацию с учетом текущей задержки, то пинг подефолту будет начиная от 200. Даже по локальной сети! Да вы что, боже упаси! |
Да какая разница? Причины могут быть любые, косяки в роутере, косяки в сетевой карте, косяки в конкретной реализации протокола, потеря пакета и его переотправка. TCP не гарантирует синхронности прохождения пакетов.
|
Разница огромна. Дело в том, что если касяк как вы говорите в роутере сетевухе и прочем то с этим ничего не поделать. А если это касяк во флеше и его можно исправить то это нужно исправлять! Мне кажется это проблема всетаки решаемая силами флеш программиста. Ну посмотрите на симптомы, они очень странные.
Могу кое что добавить. Вот есть А, B, C клиента, шлем с A. на B и C мессаги доходят пачками примерно по штук 5ть в одно и тоже время. Еще раз, вопрос не в том как добиться синхронности. Нет, это отдельный разговор. Вопрос в том - почему такая разница в пинге. |
вообще смахивает на то, что просто забивается сеть => отсюда такие симптомы.
|
Цитата:
Код:
self.transport.write( str(line) + chr(0)) |
Цитата:
Код:
>>> "\0" == chr(0) |
Проблему так и не решили ( может еще идеи есть у кого?
|
Вы же сами попросили подучить матчасть. Пока учим.
|
| Часовой пояс GMT +4, время: 18:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.