LINUX.ORG.RU

Написание серверного приложения под Linux


0

0

Доброе время суток! Я - программист под Windows, но недавно мне поставили задачу написать программу-агент, серверная часть которой должна работать под управлением Linux :( В линухе я, понятное дело, не шарю. То есть шарю чуть-чуть на уровне пользователя. Итак, подскажите, пожалуйста кто чем может. Работа агента напоминает технологию Jabber, мне надо чтобы:

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

В общем-то получается jabber-сервер, на который необходимо дописать всякие фишки вроде запроса баланса, передача команд пользовательским агентам в виде текстовых сообщений и т.д.

А теперь собственно вопросы: 1) Можно ли написать шустрое серверное приложение на java, qt или надо обязательно на C++ ? 2) Какова вообще архитектура подобных приложений? Каждый клиент через сокет соединяется с сервером и все время поддерживает соединение? А сервер не сдохнет от нескольких тысяч открытых сокетов? Для каждого клиента походу на сервере должен создаваться собственный поток(или как там под линухом это называется) для прослушки каждого сокета. А сервер не ляжет от тысяч потоков? 3) Может быть можно взять уже готовое решение, какой-нибудь jabber-сервер и немного перепилить его руками? Подскажите какие-нибудь исходники jabber-серверов. 4) Ну и, конечно же, вопрос-боян. Какой дистрибутив Linux лучше всего позволит сосредоточится на разработке? Именно на разработке а не на настройке этого дистрибутива. Есть mandriva, open suse, kubuntu, серверная версия ubuntu, slackware.

Заранее всем спасибо!

Пиши на Java, заработает на Linux сразу, скорее всего. Главное не делать явных виндозависимых действий. Но даже если сделаешь, то на Java исправить будет проще всего. Для серверного приложения что Java, что C++ особо разницы не будет, но на Java проще и баги менее вероятны

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

Юноша, вы дебил.


я вижу у тебя комплекс неполноцености, дядя!, и ничего остроумнее не можешь придумать :)

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от vertexua

Ключевое слов конечно «ИМХО» ) Тогда в ваших словах есть логика.


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

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

И еще меньше багов, так как некоторые категрии багов просто отсутствуют. Плюс легкая интеграция с многими протоколами.

А о производительности можно спорить бесконечно. На многих бенчмарках С++ сливает

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

А о производительности можно спорить бесконечно. На многих бенчмарках С++ сливает


срочно тогда пиши чтобы apache на java переписывали

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Конечно, гугли. Ты знаешь что такое сборка под конкретную архитектуру? Так вот JIT Java делает это со всем софтом.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Ты знаешь что такое сборка под конкретную архитектуру?

нет, а что это?!
Это где всё с помощью препроцессора разруливается?!


Так вот JIT Java делает это со всем софтом.

это всё приемущество?!

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

> Это где всё с помощью препроцессора разруливается?!

Это когда набор инструкций современный

это всё приемущество?!

Мы говорили о производительности. Но с библиотекой классов Java SE никто не поспорит. Вообще похоже ты ничего не знаешь о Java, нет смысла общаться

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Мы говорили о производительности.

ты хотел наверное сказать что JIT компиляция быстрее чем просто интерпритатор.

Вообще похоже ты ничего не знаешь о Java, нет смысла общаться

у меня на неё не стоит, что только не делал ничего не помогает... :(

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от vertexua

>И еще меньше багов, так как некоторые категрии багов просто отсутствуют. Плюс легкая интеграция с многими протоколами.

Да часть проблем с границами доступа убирается.Но блин ресурсов оно ест в разы больше, хотя для нормального железа это не проблема. Правда на том же erlange он быстрее ее сделает,хотя хз.ИМХО

pinachet ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Нет, я как раз говорил что JIT может генерировать код одинакового качества, как и статическая компиляция

vertexua ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Быстрее это слабо сказано. Java по скорости сравнима с C++. Если не веришь, то сам погоняй тесты. Никакого интерпретатора в java нет. Исполняется нативный код после jit компиляции.

Reset ★★★★★
()
Ответ на: комментарий от Boy_from_Jungle

А жаба с сырыми сокетами может работать?!

слил и теперь пытаешься из пальца высосать то почему же java не подходит для написания серверных приложений?

Reset ★★★★★
()
Ответ на: комментарий от Reset

слил и теперь пытаешься из пальца высосать то почему же java не подходит для написания серверных приложений?


где я писал что слил?! - это твои фантазии :)
я просто спросил, т.к. не нашёл этого, а хотел сравнить как будет работать. Я выше написал что

Java для сетевого программирования не годиться, ИМХО

Уверен, что у кого прямые руки, он напишет приложение на С/C++, которое жабу выиграет в производительности.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

а хотел сравнить как будет работать.

совершенно идиотское сравнение

Уверен, что у кого прямые руки, он напишет приложение на С/C++, которое жабу выиграет в производительности.

а если задаться целью, то можно и %уй сломать

Reset ★★★★★
()
Ответ на: комментарий от Reset

совершенно идиотское сравнение

я для себя, хочеться посмотреть.

а если задаться целью, то можно и %уй сломать

я ж говорю, нужно знать что куда тыкать

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от anonymous

Юноша, вы дебил. И еще вы быдло.

это снова ТЫ - мой любимый, тупой, неполноценный задрот?!
Снова не выучил новые слова?! Ты безнадёжен - УБЕЙСЯ!

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от vertexua

>Да, память Java жрет. Но работает очень быстро. Что совсем не касается Swing)

Да Swing, это один из глобальных exception :)
Просто меня всегда волновало как внутри этот сборщик мусора работает?Просто он как бы рандомно вызывается и тогда она сильно подтормаживает.
P.S Насколько мне известно Java быстрее C++ только в тех случаях когда программа собирается без каких либо флагов оптимизации(грубо говоря)
P.P.S Просветите меня если я не прав

pinachet ★★★★★
()
Ответ на: комментарий от pinachet

Просто меня всегда волновало как внутри этот сборщик мусора работает?Просто он как бы рандомно вызывается и тогда она сильно подтормаживает.

Ну прочитай, информации море.

P.S Насколько мне известно Java быстрее C++ только в тех случаях когда программа собирается без каких либо флагов оптимизации(грубо говоря)

Джава быстрее С++, если на С++ писала код макака. Джава не намного медленнее С++, и может обгонять на никому не интересных синтетических тестах.

Legioner ★★★★★
()
Ответ на: комментарий от pinachet

Какой сборщик мусора? Марш на википедию.

Насколько мне известно Java быстрее C++ только в тех случаях когда программа собирается без каких либо флагов оптимизации(грубо говоря)

Java быстрее С++, когда вызывается много new, которые в Java намного быстрее. Потом Java умеет оптимизировать код, чтобы он влезал в кеш каждой машины, на которой запускается программа. Java удаляет обьекты большими кусками, а не по чуть-чуть с каждым delete, как в С++. Ну и кончено генерирует максимально оптимальные инструкции к CPU для бинарных сборок, когда в C++ нужно или делать специальные сборки или довольствоваться минимальным старым набором инструкций.

А тормозит Java по сравнению с С++, потому что первые несколько тысяч вызовов функций (фрагментов кода) интерпретируются, а потом компилируются. Потому на первой тысяче будет сливать, потом будет работать так же, но у же не догонит. Такое поведение обосновано на програмах с большим ожиданием ввода-вывода. А когда не обосновано, то отключается параметром -Xbatch. Тогда при запуске програма компилируется полностью. Еще Java тормозит на generics, которые сделаны на проклятом type erasure. И тормозит на операциях с floating point, потому что результаты по стандарту Java должны быть одинаковыми, что дает абсолютную переносимость, но не все CPU одинаково работают. Потому для функций тригонометрии например делается програмная коррекция. Посчитайте sin(1000000000) на Java, C++, Python и кажется там разные результаты.

vertexua ★★★★★
()
Ответ на: комментарий от Legioner

В целом ты знаешь что такое gentoo? Ну так вот считай что по сравнению с бинарными сборками програм на С++ в Ubuntu, Java приложения всегда на твоем компе собираются с -march=native, SSE и еще десятком оптимизаций под твою машину, но больше занимают памяти и работают немного медленнее, потому что у них внутри намного больше дел всяких происходит. Всякие stack traces, горы дебаг информации, все завернуто в менеджер безопасности, у которого идея похожая на SELinux, полный RTTI с наименьшими подробностями и возможность интроспекции, Swing поверх всех абстракций твоей ОС и еще рисует виджеты через Java2D, которая работает через OpenGL. И все это кроссплатформенно. Не удивительно почему простое окошко запускается почти секунду.

vertexua ★★★★★
()
Ответ на: комментарий от Legioner

Этот пост писал отвечая продолжая предыдущий ответ. Это не ответ на твой пост

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Много хороших слов про java написали. А про .NET что скажете? Кто-нибудь сталкивался с нетовскими приложениями под mono?

mbinger
() автор топика
Ответ на: комментарий от mbinger

Ну .NET - абсолютно одно и то же, слизано подчистую. Только с vendor lock in, закрыто и только под оффтоп. На mono жалко смотреть.

vertexua ★★★★★
()

была подобная задача пару месяцев назад. тоже хотел своё воять, но взял таймаут на обдумывание и сделали всё очень просто. jabber openfire + какой-то клиент (название уже не помню, написан на PyGtk). вся серверная часть уже будет за вас реализованна. поверьте, это будет быстрее чем ваять свой сервер, тем более вы не разбираетесь в системном программировании. вариантов у вас два - либо так как написал выше, либо отдать проект другим людям.

anonymous
()
Ответ на: комментарий от mbinger

кстати, простите конечно за вопрос, но зачем вам линукс на сервере? нет, серьёзно. мы все знаем, что линукс рулит, но если вы умеете только .NET, а денег на нормального сиспрограммера нет, не проще ли, если уж только вам ставят задачу, раскашелиться на оффтоп? всё равно ж под линукс нормально не напишите, если всё с нуля.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.