Четверг, 28 Марта 2024, 22:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Программирование » Общие обсуждения программистов » Выбор языка для сервера (C++ vs C#)
Выбор языка для сервера
harmoxyneДата: Воскресенье, 17 Мая 2015, 15:30 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
И так.
Всем привет.
Есть дело следующее. Нужен сервер. Сервер нужен быстрый, качественный, многопоточный. Поскольку сервер должен использоваться для динамичной игрушки, делать нужно на UDP. Хостится сервер будет на *nix-е (пока не решил конкретно, для начала повисит на арче, потом, если что, перекину на генту).
Собственно, вопрос в следующем - что использовать: С# или C++? Да, я знаю, что Моно - костыль, и все дела, но работает он весьма хорошо.
С одной стороны, в C# уже по стандарту есть много полезных вещей (одни хэш-таблицы чего стоят), плюс реализация сетевых действий там как-то попроще.
С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела).

Клиент будет на C# (Unity, привет biggrin ), потому, логично, что C# + C# будет проще, не придется делать никаких преобразований данных по-пути, ещё что. С другой стороны - скорость.
А как вы думаете?

VinchensooДата: Воскресенье, 17 Мая 2015, 15:55 | Сообщение # 2
Злобный социопат с комплексом Бога
Сейчас нет на сайте
C# и вин сервер. Моно, пока что, как следует не едет для серьезных проектов типа игр.
А на С++ никогда не допишешь, иначе не задавал бы такие вопросы)
Цитата harmoxyne ()
С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела).

Это заблуждение


harmoxyneДата: Воскресенье, 17 Мая 2015, 16:08 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Цитата Vinchensoo ()
Это заблуждение

Какая из частей высказывания - про наличие или про скорость? biggrin
Цитата 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 ()
Тут чутка срача..

Интереса ради, запустил код в той темке на винде и под моно в линуксе.
Короче, Винченсо, за два года ничего не поменялось biggrin
На винде 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, а это весьма хорошо smile
Не смотрел этой спецификации, потому не знаю много, что там есть.
Если вдруг окажется, что в плюсах есть аналог StreamWriter/Reader из C# (где-то у меня валялся хороший сервер на этой штуке), то вопрос, в принципе, отпадет до получения солидного количества денег smile
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, что наводит на мысли, что там тоже можно так сделать, как у тебя на шарпе.
Сам я с сетью через потоки там не работал, только с файлами, поэтому ничего гарантировать не могу smile
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 ()
С другой стороны, в С++ почти ничего нет, придется либо писать кучу велосипедов, либо учить фреймворк. Но скорость на С++ должна быть значительно выше (все же нативность, все дела).

Для него есть всё и вся...


Форум игроделов » Программирование » Общие обсуждения программистов » Выбор языка для сервера (C++ vs C#)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг