Здравствуйте. Хочу написать консольный чат на С++ под Linux. Позже прикрутить его к интерфейсу 2д игры. Для создании игры планирую использовать (LibSDL).
Прошу дать совет, что необходимо изучить и в какой последовательности.
Начал читать про Сокеты.
Сокеты, TCP, epoll/select (а лучше обертку какую заюзать) и треды на клиенте. + вам нужно разработать простенький минималистичный протокол - в случае бинарного протокола - просто берете используемые структурки и записываете их в стрим. В случае текстового - нужно придумать в каком формате их передавать и т.д.
Для IPC попробуйте xтото более современное DBus например или из того же boost
Потоки С++ 11 threads (Concurrent programming in action C++ book) или boost threads
А как он может быть консольным если игра графическая?
Забудьте про сокеты, используйте нормальные очереди сообщений типа zeromq zeromq.org или rabbitmq www.rabbitmq.com
Это и проще и убережет от лишних велосипедов и ошибок.
Только скачать библиотеку для работы на c++
*mq нужны для реализации шины данных между частями приложений, а не для чатика. rabbitmq вообще не подходит под это. Да и на сокетах написать чатик не проблема.
Ну, да, конечно! "Вам нужно разработать простенький минималистичный протокол".... Нафиг всё, будем recvmsg/sendmsg юзать, ошибки переполнения обрабатывать, протоколы придумывать, пользователей авторизовывать, нагрузку распределять... И будет у нас не чатик, на новый mycoolmqlibchat.
Чаты, комнаты возможно потом захочу сделать. Может быть. Но для начала, хочу разобраться и сделать простую версию рабочего чата. Попробую почитать основы и сделать, потом Ваш вариант использования обёртки. Спасибо за помощь!
Ну а если с сокетами, то почитайте - www.linuxhowtos.org/C_C++/socket.htm
Еще не забыть треды прикрутить, сделать мьютексы и настроить pool/epool. Всего-то ничего, строк на 100-200... Плюс реализация своего протокола...
Рекомендую не создавать своих протоколов а воспользоваться уже готовыми. А еще лучше найти готовый код который уберет от вас все ( или большинство ) сложностей ручной работы с сокетами. Разве что если вам это нужно для обучения - тогда конечно пишите все сами.
Советую взять одну из библиотек для работы с xmpp и реализовать чат поверх него. Тогда у вас будет готовая авторизация, списки контактов, их состояния, комнаты. Да и работать с этим будет куда проще чем отправляя сообщение в голый сокет. Посмотрите например на strophe.im/libstrophe или на camaya.net/gloox
Зы. тут вам уже посоветовали использовать Mq, но имхо мое предложение должно подойти лучше, как протокол созданный специально для чатов.
Алексей Черемисин: но не использовать же amqp для чата. Есть намного более удачные реализации.
В своем ответе я же хотел акцентировать внимание на то что это геморой, хоть и не такой смертельный. Готовых реализаций хватает, как отдельно I/O серверов (решает проблемы по нагрузке в плане обработки соединений и т.д.), так и чатиков. Проблему аунтефикации и авторизации всеравно решать придется.
Сергей Протько: Я не настаиваю, чтобы непременно использовать MQ.
Я рекомендовал:
- не использовать сокеты (если только пообучаться)
- не придумывать своих протоколов/велосипедов
- посоветовал то, с чем сам работаю и достаточно успешно
- привел пример реализации на zeromq за 15 минут!!! да, это библиотека, но гораздо лучше голых сокетов, на порядок, и я знаю как их программировать и как это муторно, если без подпорок.
- если уж нужно с авторизацией, то ставим rabbitmq или монструозного, как предложил bogolt: , xmpp.
Но это правильно решение, использовать готовое, будь то mq или одну из реализаций comet.