Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.07.03;
Скачать: [xml.tar.bz2];

Вниз

Игровой чат в mmorpg (реализация)   Найти похожие ветки 

 
Luarvic   (2011-03-18 12:24) [0]

Вот поспорили с другом, как правильней реализовывать обмен текстовыми сообщениями в играх.
Мой вариант: сервер накапливает все строки чата, и отмечает у клиентов какие именно им нужно отправить, а когда клиент присылает запрос, то ему уже отправляются все отмеченные строки. Соответственно запрос присылается каждые 1-5с
Не мой вариант: на сервер приходит текстовое сообщение, сервер тут же отправляет его всем клиентам которым оно адресовано.

Вопрос: какой из двух выше вариантов более правильный (и почему?)
Заранее спасибо.


 
OW ©   (2011-03-18 14:15) [1]


> на сервер приходит текстовое сообщение, сервер тут же отправляет
> его всем клиентам которым оно адресовано.


пришел - ушел.
Выстрелил и забыл, зачем копить что-то..


 
asail ©   (2011-03-18 14:22) [2]


> OW ©   (18.03.11 14:15) [1]

А если клиент-адресат ушел в несознанку на 5 минут (потеря связи)?


 
Luarvic   (2011-03-18 14:24) [3]

Уточнение: используется протокол TCP


 
Медвежонок Пятачок ©   (2011-03-18 15:11) [4]

православный сервер должен обслуживать запросы клиентов.


 
Luarvic   (2011-03-18 15:31) [5]


> православный сервер должен обслуживать запросы клиентов.

почему?


 
OW ©   (2011-03-18 15:57) [6]


> А если клиент-адресат ушел в несознанку на 5 минут (потеря
> связи)?

он это может сделать и в момент рассылки


 
Медвежонок Пятачок ©   (2011-03-18 16:04) [7]

почему?

Просто потому что он сервер. Обслуживатель.

А еще потому, что в обратном случае :
1. Ты рано или поздно запутаешься в протоколе обмена.
2. Все клиенты должны содержать в себе свои мини-сервера.


 
KSergey ©   (2011-03-18 16:52) [8]

Не понятно зачем в первом варианте инициирование приема сообщений должен делать клиент.
Пришло на сервер сообщение - склал в очередь - отдельно разослал, что удалось; что не удалось - повторяем (при условии наличия клиентского коннекта).

Ну потому как часто задержка в получении критична, не надо ее искусственно увеличивать.


 
OW ©   (2011-03-18 17:00) [9]

только так, имхо
> Пришло на сервер сообщение -
>отослал,  не удалось - повторяем


 
Luarvic   (2011-03-18 17:14) [10]

Итого 2 человека за второй вариант и 1 за первый... Чтоже выбрать всетаки?


 
KSergey ©   (2011-03-18 17:21) [11]

> OW ©   (18.03.11 17:00) [9]

Не.
Удобнее, когда разбито на модули/потоки:
- прием сообщений от клиентов и складывание в очередь принятых
- перекладывание из очереди принятых в очередь для отправки, если надо нескольким - дублируем для каждого получателя экземпляр в этой очереди
- рассылаем сообщения клиентам из очереди отправки.

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

Основная задача здесь - сделать не слишком много потоков. Когда клиентов 5-10-30 - не страшно хоть на каждого потоков наплодить. Хоть по два. Когда 500-1000 - нехорошо.


 
OW ©   (2011-03-18 17:23) [12]


> KSergey ©   (18.03.11 17:21) [11]

вообще - то , да. Согласен.


 
tesseract ©   (2011-03-19 22:03) [13]


> Причем 2 и 3 пункты должны уметь засыпать при отсутствии
> сообщений во входящих для них очередях и автоматически просыпаться,
>  как только во входную для каждого очередь попадает сообщение,
>  требующее обработки.


А зачем "просыпаться" ? Асинхронная очередь не должна засыпать.


> Основная задача здесь - сделать не слишком много потоков.


CreateOnConnect - это такая юниксовая отсталость.  Пулы потоков - нормальный шаблон, чем не нравится?



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2011.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1300454463
stas
2011-03-18 16:21
2011.07.03
потоковое видео


15-1300102057
Иван
2011-03-14 14:27
2011.07.03
Можно ли готовую программу разбить на исходники?


15-1300743002
Юрий
2011-03-22 00:30
2011.07.03
С днем рождения ! 22 марта 2011 вторник


2-1301080427
DenKa
2011-03-25 22:13
2011.07.03
Вписать картинку в рамку с закругленными краями


15-1300699590
CRLF
2011-03-21 12:26
2011.07.03
Unicode, есть ли символ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский