Коммуникация Клиент-Клиент, Клиент-Сервер
Привет всем, для начала хочю сказать всем спасибо, кто поддерживает данный проэкт.
А теперь о моей проблеме. По проэкту в университете моей группе (6 человек) было поставлено следующее задание. Мы должны создать игру в шашки, у нас должен быть клиент, в котором можна играть и отсилать сообщения с помощью общего чата. Есть также сервер который должен сохранять информацию по поводу игроков, которые зарегестрированы, какие игры в шашки они выиграли, проиграли и т.д., в общем итоге ведение простой статистики. Игроки же играют не локально друг с другом, а через интернет. Вопрос который у меня возникает, это как осуществить коммуникацию в общем в проэкте. Ах да забыл сказать, что на одном клиенте можна играть максимум 5 игр одновременно, причём для каждой игры открыт новый Таб, но это не важно. Важен сам факт что я вижу две возможности коммуникации через сокеты: 1) Для отправки сообщений в чат, исползуеться коммуникация Клиент <-> Сервер <-> Клиенты, которые находяться в онлайне(тоесть броудкаст) Для отправки актуальной доски (тоесть позиций фишек, после того как человек сделал свой ход) используеться коммуникация Клиент(я) <-> Сервер <-> Клиент (противник). Для сохранения статистики победивший, отсылает информацию на Сервер, которую сервер сохраняет в БД. 2) Для отправки сообщений в чат, исползуеться коммуникация Клиент <-> Сервер <-> Клиенты, которые находяться в онлайне(тоесть броудкаст) Для отправки актуальной доски (тоесть позиций фишек, после того как человек сделал свой ход) используеться коммуникация Клиент(я) <-> Клиент (противник). Для сохранения статистики победивший, отсылает информацию на Сервер, которую сервер сохраняет в БД. Так как я пока что не очень разбираюсь в программировании сокетов, у меня такой будет вопрос, какой из вариантов лучше для коммуникации ? Если брать второй вариант, нужны ли для коммуникации многие порты, в данном случае 5, так как можно вести 5 игр одновременно, или всё можно делать через один порт ? Надеюсь я компакто и понятно обьеснил свою проблему, и надеюсь на ваши ответы и помощь. П.С. я не нуждаюсь в чистом соурс коде, мне просто нужна помощь в понятии самого процесса этой коммуникации. Заранее спасибо. |
Цитата:
Как отладишь механизм передачи сообщений, все остальное станет делом техники и аккуратного программирования. |
Спасибо огромное за ответ, я обязательно ещё раз пройдусь по этому туториалу.
Если не сложно, скажи, с твоей точки зрения, какая из архитектур лучше ? |
pivster, я честно сказать не понял, в чем у них принципиальная разница. По реализации и то и то возможно. Самое критичное, что я могу предположить - нехватка времени в конце партии. Соотв. лучше отдать приоритет игре, и свести общение клиентов только с теми кто играет в первую очередь и с наблюдающими во вторую. Чат - ну так, некритичное баловство.
|
Принципиальной разницы как таковой в принципе и нету. Просто мне кажеться чтобы разгрузить сервер, лучше делать отправку ходов между клиентами, а не через сервер, что уменьшит загружаемось сервера.
Давай я попробую описать своё понимание коммуникации между клиентами, возможно у меня просто напросто проблема в мишлении. И так, состояние доски передаёться только между клиентами которые друг с другом играют. 5 открытых игр. У каждого клиента значит должен быть лисенер на порт. Вопрос, чтобы вести 5 игр, или ожидать подключение от 5 клиентов, надо 5 паралельных лисенеров на разных портах ? или же соединения с 5 клиентами будет проходить через один порт, и каждому клиенту надо только один лисенер ? лисенер в смысле ожидания подключения естественно. Ах да по поводу чата, это не некритичное баловство, чат должен быть, такое задание проэкта. Наблюдателей у партии небудет, только два игрока. Остальные же знают только, что некий игрок ведёт некоторое количество партий, с кем именно, знать им не обязательно. |
Цитата:
Цитата:
Передачу доски - можно свести к оправке 64х байт с избытком, т.е. не такое уж и большое сообщение, чтобы "забивать" канал связи. Соотв. не столь сложный алгоритм синтеза и разбора сообщения. Можно конечно поиграть со скоростями синтеза/разбора на синтетических тестах, и выбрать оптимальный. Это добавить работе плюсов. |
По поводу передачи самой доски:
мы собираемся только передавать 3 ключа длиной в 32 знака. Тоесть: Black = {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} White = {0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} King = {0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} Первые два ключа это позиция фишек на доске, третий ключ, если сопоставить один из первых двух с третим, определяет где стоит дамка. Простая логика, так сказать. Для начала я думаю, создам сегодня тестовые клиенты, чтобы увидеть просто как в действительности работать с сокетами при подключении клиент <-> клиенты. Практика всё таки я думаю сможет помочь продвинуться в этом направление ;) |
Время: 15:13. |
Время: 15:13.
© OSzone.net 2001-