Выбор языка для сервера
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 15:30 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| И так. Всем привет. Есть дело следующее. Нужен сервер. Сервер нужен быстрый, качественный, многопоточный. Поскольку сервер должен использоваться для динамичной игрушки, делать нужно на UDP. Хостится сервер будет на *nix-е (пока не решил конкретно, для начала повисит на арче, потом, если что, перекину на генту). Собственно, вопрос в следующем - что использовать: С# или C++? Да, я знаю, что Моно - костыль, и все дела, но работает он весьма хорошо. С одной стороны, в C# уже по стандарту есть много полезных вещей (одни хэш-таблицы чего стоят), плюс реализация сетевых действий там как-то попроще. С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела).
Клиент будет на C# (Unity, привет ), потому, логично, что C# + C# будет проще, не придется делать никаких преобразований данных по-пути, ещё что. С другой стороны - скорость. А как вы думаете?
|
|
| |
Vinchensoo | Дата: Воскресенье, 17 Мая 2015, 15:55 | Сообщение # 2 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| C# и вин сервер. Моно, пока что, как следует не едет для серьезных проектов типа игр. А на С++ никогда не допишешь, иначе не задавал бы такие вопросы) Цитата harmoxyne ( ) С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела). Это заблуждение
|
|
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 16:08 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Цитата Vinchensoo ( ) Это заблуждение Какая из частей высказывания - про наличие или про скорость? Цитата Vinchensoo ( ) вин сервер Дороговато и много лишнего будет. Цитата Vinchensoo ( ) Моно, пока что, как следует не едет для серьезных проектов типа игр. Ну-с, пока не замечал с ним каких-либо проблем в использовании стандартных .Net приблуд
|
|
| |
Vinchensoo | Дата: Воскресенье, 17 Мая 2015, 16:59 | Сообщение # 4 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Цитата harmoxyne ( ) Ну-с, пока не замечал с ним каких-либо проблем в использовании стандартных .Net приблуд Ну либо ничего серьезного пока не делал, либо что-то изменилось за последние года 2. Около пары лет назад у коллег был проект на МОНО- плевались как могли. Цитата harmoxyne ( ) Дороговато и много лишнего будет. Ну а зачем писать на шарпе тогда? Бери java и спокойно компиль ее под линукса. Шарп- это платформа мелкомягких, кто бы там что не пытался рассказывать про кроссплатформенность. Цитата harmoxyne ( ) Какая из частей высказывания - про наличие или про скорость? Про скорость
|
|
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 17:11 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Цитата Vinchensoo ( ) что-то изменилось за последние года 2. Многое, в принципе. Он стал намного лучше. Цитата Vinchensoo ( ) Ну а зачем писать на шарпе тогда? Бери java и спокойно компиль ее под линукса А вот джавы я не знаю и не люблю. Цитата Vinchensoo ( ) Про скорость Ну, естественно, что это зависит от кода. Но, если писать нормально, то С++ будет быстрее.
|
|
| |
Ranger | Дата: Воскресенье, 17 Мая 2015, 17:13 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Цитата harmoxyne ( ) Но скорость на С++ должна быть значительно выше (все же нативность, все дела). давно ведутся споры о выборе шарпа против крестов для высоконагруженных серверных приложений Тут чутка срача..
Цитата harmoxyne ( ) я могу что на том, что на том. Ну так сделайте синтетические тесты на том и на том с прогнозируемыми бутылочными горлышками ... Уже по результатам смотрите.
|
|
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 17:28 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Цитата Ranger ( ) синтетические тесты Видимо, забыл написать, что такая штука не подходит. Хотелось бы узнать более-менее реальный опыт.
Добавлено (17 мая 2015, 17:28) --------------------------------------------- Цитата Ranger ( ) Тут чутка срача.. Интереса ради, запустил код в той темке на винде и под моно в линуксе. Короче, Винченсо, за два года ничего не поменялось На винде 1900 мс, под моно 8743. Потому, думаю, можно добавить ещё и джаву к сравнению.
Сообщение отредактировал harmoxyne - Воскресенье, 17 Мая 2015, 17:29 |
|
| |
Vinchensoo | Дата: Воскресенье, 17 Мая 2015, 17:44 | Сообщение # 8 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Цитата harmoxyne ( ) Короче, Винченсо, за два года ничего не поменялось На винде 1900 мс, под моно 8743. Потому, думаю, можно добавить ещё и джаву к сравнению. Там были в принципе косяки в виде несовметсимости API и тд. Я недавно столкнулся с тем, что в mono не реализовано cryptoAPI, а мне нужно было. И подобные фокусы. Это мое имхо, но брать шарп и сидеть на линуксах- это что-то странное. Хотя бы потому, что технология проприетарная.
Что касается тестов, я не смотрел, но синтетика, как правило, не показательно. Когда шарп программисты начинают писать тесты на плюсах также, как они пишут на шарпе- мы получаем, что шарп быстрее С++. Возможно, тоже самое с моно. Код придется допиливать именно под моно, мб и начнет работать более-менее сносно. Но все равно моно- в помойку)
Цитата harmoxyne ( ) Ну, естественно, что это зависит от кода. Но, если писать нормально, то С++ будет быстрее. У моего поста был другой посыл, код на С++ будет работать быстрее(возможно) для решения какой-то хитрой алгоритмической задачи, написанный очень опытным программистом и задолго времени. Для реального приложения, которое. например, активно работает с БД, и современного железа разница нивелируется прямыми руками до такой степени, что писать на С++ нерационально в плане времязатрат.
Цитата harmoxyne ( ) А вот джавы я не знаю и не люблю. Тогда пиши на шарпе под винсервер. Это не проблема, если ты реально напишешь готовую игру, ты всегда найдешь спонсора, который за рекламку или место в титрах арендует тебе вин-сервер. Или донат, в конце-концов.
|
|
| |
Edison6 | Дата: Воскресенье, 17 Мая 2015, 17:55 | Сообщение # 9 |
TRUE Programmer
Сейчас нет на сайте
| Java: - Netty + допиливать ручками решение и потом пишешь игру, доки много - Smarfox - вообще простое решение просто берешь и пишешь игру, 100 коннектов, дальше уже как сказал винч ищешь спонсора, донат и т.п.
http://netty.io/ http://www.smartfoxserver.com/
Берил сбрей усы
Сообщение отредактировал Edison6 - Воскресенье, 17 Мая 2015, 17:57 |
|
| |
Saitei | Дата: Воскресенье, 17 Мая 2015, 21:38 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата harmoxyne ( ) Клиент будет на C# (Unity, привет biggrin ), потому, логично, что C# + C# будет проще, не придется делать никаких преобразований данных по-пути, ещё что. С другой стороны - скорость. А как вы думаете? Мне кажется, что стоить закрыть глаза на скорость, т.к. вряд ли в игрушку будут рубиться тысяча игроков. Когда до этого доживёте - вот тогда уж можно ловить проблемы и решать их (латая дыры или переписывая сервер :) )
Я бы посоветовал брать тот ЯП, который удобен лично тебе. Как уже и говорили: да, из С++ можно выжать неплохую скорость, но для этого нужно быть опытным программистом + не факт, что твой труд окупится. Хотя, с другой стороны, есть куча сетевых библиотек с богатой документацией для С++ (и не только) :)
Лично я писал бы либо на С++, либо на Java. В приоритете С++, конечно, потому что это мой main ЯП и я его очень люблю))
|
|
| |
Xakep | Дата: Воскресенье, 17 Мая 2015, 22:01 | Сообщение # 11 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата harmoxyne ( ) С одной стороны, в C# уже по стандарту есть много полезных вещей (одни хэш-таблицы чего стоят), плюс реализация сетевых действий там как-то попроще. std::map ????? Хотя конечно это не совсем хэш таблица, а красно-черное дерево, но один фиг для тех же целей используется - создание ассоциативного массива. Цитата harmoxyne ( ) С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела). С++ очень востребован как раз в основном из-за того что куча всяких библиотек под него написано. По теме, мне кажется ни C# ни C++ плохо подходят для этой задачи, советую посмотреть в сторону Haskell, Erlang, OCaml
Сообщение отредактировал Xakep - Воскресенье, 17 Мая 2015, 22:01 |
|
| |
Saitei | Дата: Воскресенье, 17 Мая 2015, 22:06 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Цитата Xakep ( ) std::map Есть ещё std::unordered_map && std::hash ^^
|
|
| |
Jhon | Дата: Воскресенье, 17 Мая 2015, 22:08 | Сообщение # 13 |
частый гость
Сейчас нет на сайте
| Цитата Xakep ( ) std::map ????? Хотя конечно это не совсем хэш таблица, а красно-черное дерево, но один фиг для тех же целей используется - создание ассоциативного массива. В C++11 появился std::unordered_map, который есть хэш-таблица.
// UPD: опередили
Сообщение отредактировал Jhon - Воскресенье, 17 Мая 2015, 22:09 |
|
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 22:11 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| Jhon, а это весьма хорошо Не смотрел этой спецификации, потому не знаю много, что там есть. Если вдруг окажется, что в плюсах есть аналог StreamWriter/Reader из C# (где-то у меня валялся хороший сервер на этой штуке), то вопрос, в принципе, отпадет до получения солидного количества денег
|
|
| |
Jhon | Дата: Воскресенье, 17 Мая 2015, 22:45 | Сообщение # 15 |
частый гость
Сейчас нет на сайте
| Вообще, в плюсах большая часть задач может быть решена с помощью Qt и Boost. Хз, что такое StreamWriter/Reader из C#, но судя по описанию его аналоги есть в Qt: QTextStream, QDataStream
|
|
| |
harmoxyne | Дата: Воскресенье, 17 Мая 2015, 22:49 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Jhon, я, чесно не помню как, но умудрялся с его помощью в шарпе писать строки в сетевые потоки. Там писал какой-то чат, и это было весьма удобно - никаких преобразований в байты/обратно и подобного - отправляешь строку, она приходит, строку и возвращаешь. Но там и клиент, и сервер были на шарпе.
|
|
| |
Jhon | Дата: Воскресенье, 17 Мая 2015, 22:53 | Сообщение # 17 |
частый гость
Сейчас нет на сайте
| В Qt классы QTextStream, QDataStream связываются с классом QIODevice, наследниками которого являются QAbstractSocket, QBluetoothSocket, QBuffer, QFileDevice, QLocalSocket, QNetworkReply, QProcess и QSerialPort, что наводит на мысли, что там тоже можно так сделать, как у тебя на шарпе. Сам я с сетью через потоки там не работал, только с файлами, поэтому ничего гарантировать не могу
|
|
| |
Xakep | Дата: Воскресенье, 17 Мая 2015, 23:59 | Сообщение # 18 |
めちゃくちゃちゃ
Сейчас нет на сайте
| почитай, может пригодится: http://habrahabr.ru/post/111268/
Сообщение отредактировал Xakep - Понедельник, 18 Мая 2015, 00:00 |
|
| |
OpenGOO | Дата: Понедельник, 18 Мая 2015, 14:17 | Сообщение # 19 |
почти ветеран
Сейчас нет на сайте
| Зачем изобретать велосипед, если есть такие проекты как RakNet На линуксе лучший выбор это плюсы или джава и даже возможно что и питон, но не сишарп.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Понедельник, 18 Мая 2015, 14:20 |
|
| |
MrNesh | Дата: Понедельник, 18 Мая 2015, 15:44 | Сообщение # 20 |
Воин добра и света
Сейчас нет на сайте
| Цитата harmoxyne ( ) С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела). Для него есть всё и вся...
|
|
| |
|