|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Существует сеть датчиков, расположенных на удаленных объектах, которые через TCP-, UDP- и COM-порты передают определенную информацию к нам в систему. На нашей стороне необходимо разработать сервер, который смог бы держать десятки тысяч подключений по TCP, принимать трафик по UDP-портам с десятков тысяч хостов, принимать трафик с COM-портов, и складывать все в БД. Предполагается писать сервер либо на Java, либо на PHP, либо на Python. Подскажите, какие фреймворки существуют для организации таких серверов на этих языках? Если кто разрабатывал похожие проекты, какую архитектуру использовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 12:17 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
На С++ такие вещи пишут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 19:02 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Лично я - однозначно за PHP. П.С. Необходимый вам фреймворк называется "квалифицированный программист". Но это не тот совет, который кто-нибудь когда-нибудь выполняет. "Мы тут решили организовать госпиталь на десять тысяч коек, подскажите, какой стороной скальпель держать" (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 19:09 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
host.13Если кто разрабатывал похожие проекты, какую архитектуру использовали? Я делал. На C#. Протокол SSL, около 300 тысяч сообщений в секунду сервер мог обрабатывать... Количество клиентов ограничивалось только ресурсами сервера. Технология очень простая - таски из TPL. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 22:43 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Забыл уточнить: решение должно работать как на Windows, так и на Linux. Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 13:17 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Arm79host.13Если кто разрабатывал похожие проекты, какую архитектуру использовали? Я делал. На C#. Протокол SSL, около 300 тысяч сообщений в секунду сервер мог обрабатывать... Количество клиентов ограничивалось только ресурсами сервера. Технология очень простая - таски из TPL.Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много. Нужен многопроцессорный сервер. Подходит при длительных операциях. А если операции короткие, то можно обрабатывать их в одном потоке по очереди. Надо ещё смотреть протокол обмена. Если следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 13:20 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Dmitry V. LiseevМожно на каждое соединение создавать поток Но не нужно :-) Даже безотносительно длительности операций. Накладные затраты на переключение контекста при десятках тысяч потоков будут очень большими Dmitry V. LiseevА если операции короткие, то можно обрабатывать их в одном потоке по очереди +1 Dmitry V. LiseevЕсли следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей. Условие не обязательно. Можно в любом варианте сделать: "Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей" Самое главное для ТС обеспечить нужную скорость при работе с БД. Что толку от сервера приложений, если БД не успеет сохранять инфу с десятков тысяч поставщиков информации... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:03 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Привет. Я бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд". Ну и как следствие это остаётся та же java или php ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:04 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
irbis_alЯ бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд". :-) Хе-хе. Ну для говноконтор разумеется, там может и крякнутая винда стоять. Пичалька. PS Никто не мешает сделать код под Mono, и запускать где угодно. Я делал. Работает. Даже на отвратной винде... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:11 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Arm79irbis_alЯ бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд". :-) Хе-хе. Ну для говноконтор разумеется, там может и крякнутая винда стоять. Пичалька. PS Никто не мешает сделать код под Mono, и запускать где угодно. Я делал. Работает. Даже на отвратной винде... MONO это дополнительно звено,дополнительная прослойка, которая так же понижает наработку на отказ. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:23 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
irbis_al, Java, PHP и прочие языки - тоже прослойка, которая понижает работу на отказ. Так что эталон надежности - программа на assembler ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:24 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
host.13Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это? Программист - широкое понятие. Один и тот же человек может быть гуру в одной конторе и не дотягивать до миддла в другой. Вам нужен человек, который умеет это делать или, по крайней мере, может разобраться и выдать разумные суждения. А как будет называться его должность - дело двадцатое. Мне, например, регулярно приходят вакансии, в которых основной работой архитектора считается написание идиотских бумажек. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2014, 14:28 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Dmitry V. Liseev, >>Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много А объектный пул не? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2014, 19:26 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Я использовал в нескольких проектах для игрового сокет сервера Python. Twisted. Реализуется быстро. Легко можно апгрейдить до бесконечно большого количества одновременных коннектов. Ну а если у него не хватит силенок - то С(++). Многое зависит от конкретной задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2014, 22:41 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
softwarerЛично я - однозначно за PHP. интересная мысль, с учётом того, что датчики не используют HTTP ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 10:54 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Изопропил, а COM порты используют? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 11:32 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Petro123Изопропил, а COM порты используют? в стартовом посте достаточно наличия UDP COM порты упоминать не стал - маловероятно что они напрямую к серверу будут подключаться ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 11:45 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Изопропилмаловероятното-то и оно, что у аффтара мешанина в голове по ТЗ. А к ТЗ подходят всегда буквально и дотошно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 11:49 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Arm79Dmitry V. LiseevМожно на каждое соединение создавать потокНо не нужно :-) Даже безотносительно длительности операций. Накладные затраты на переключение контекста при десятках тысяч потоков будут очень большимиЗависит от длительности операций. Сравните архитектуру apache и nginx. Накладные затраты - не проблема. Задача легко масштабируется. Поставим сотню серверов. Arm79Dmitry V. LiseevЕсли следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей.Условие не обязательно. Можно в любом варианте сделать: "Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей"Обязательное. Если я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужны. А вот если я жму кнопку и мне не важен ответ, то можно поставить запрос в очередь и через пару-тройку часов переслать мне результат мылом. Если запросы можно переупорядочивать, то очереди делаются в зависимости от предполагаемой длительности операции, приоритета, и т.д. Arm79Самое главное для ТС обеспечить нужную скорость при работе с БД. Что толку от сервера приложений, если БД не успеет сохранять инфу с десятков тысяч поставщиков информации...Тут дело в колебаниях скорости. Допустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо. Для этого нужны очереди и буфера. Ещё учебник по теории массового обслуживания. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 12:29 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
mvn3Dmitry V. Liseev, >>Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много А объектный пул не?Зависит от архитектуры системы и протоколов обмена данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 12:34 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Dmitry V. LiseevЗадача легко масштабируется. Поставим сотню серверов. А вы из своего кармана будете оплачивать покупку серверов? Dmitry V. LiseevЕсли я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужны очереди НЕ ОБЯЗАТЕЛЬНЫ. Но возможны. Dmitry V. LiseevДопустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо. А если БД успевает обработать 100 штук операций в минуту, а извне приходит 110? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 12:44 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Вам определенно нужно смотреть в сторону Event-Driven парадигмы. Подход "одно соединение -- один поток" быстро откушает всю память, а процессор будет в основном заниматься переключением контекстов. Я не знаю, как там в PHP, но для Питона есть Twisted, для Java есть Netty и Mina. Есть еще хипстерскый Node.js ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 13:35 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Arm79Dmitry V. LiseevЗадача легко масштабируется. Поставим сотню серверов.А вы из своего кармана будете оплачивать покупку серверов?Сервера стоят намного дешевле, чем оплата труда программиста. Arm79Dmitry V. LiseevЕсли я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужныочереди НЕ ОБЯЗАТЕЛЬНЫ. Но возможны.Я указал ситуацию, где очереди НЕ ВОЗМОЖНЫ. Arm79Dmitry V. LiseevДопустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо.А если БД успевает обработать 100 штук операций в минуту, а извне приходит 110?Ставим вторую БД и вместе они успевают обрабатывать уже 200. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 13:52 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Dmitry V. LiseevСервера стоят намного дешевле, чем оплата труда программиста. Мда. То есть низкую квалификацию программиста и потраченные несколько дней на продумывание архитектуры закрывать тратами на железо? Вы сильно и сильно ошибаетесь. Я бы сказал - катастрофично. Dmitry V. LiseevЯ указал ситуацию, где очереди НЕ ВОЗМОЖНЫ. Что за глупости? А если обработка вашего запроса занимает 10 минут? Вы потеряете коннект просто, ведь есть таймауты на операции. В таком случае запрос только инициирует обращение, а сервер коллбеком (SignalR, к примеру) каждые несколько секунд сообщает о статусе обработки. Так что очереди ВОЗМОЖНЫ Dmitry V. LiseevСтавим вторую БД и вместе они успевают обрабатывать уже 200. Да, гениально. У нас сервер с БД стоит почти пол миллиона баксов. Я себе так и представляю, как прихожу к начальству и говорю, что нужно прикупить второй, так как труд программистов стоит дороже, чем сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 15:02 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
ИзопропилsoftwarerЛично я - однозначно за PHP. интересная мысль, с учётом того, что датчики не используют HTTP а причем тут http? мультиплексирующий пре-fork на количество ядер сокет-сервер с libevent, принимающий tcp|udp и еще кучу всего, легко. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 16:54 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Тут первоначальный вопрос вот какой: Каков допустимый лаг в появлении данных? только реалтайм или есть допустимое окно? от этого стоит плясать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 16:57 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
host.13Существует сеть датчиков, расположенных на удаленных объектах, которые через TCP-, UDP- и COM-порты передают определенную информацию к нам в систему. На нашей стороне необходимо разработать сервер, который смог бы держать десятки тысяч подключений по TCP, принимать трафик по UDP-портам с десятков тысяч хостов, принимать трафик с COM-портов, и складывать все в БД. Предполагается писать сервер либо на Java, либо на PHP, либо на Python. Подскажите, какие фреймворки существуют для организации таких серверов на этих языках? Если кто разрабатывал похожие проекты, какую архитектуру использовали? На С надо писать, или на С++. Либо на С/С++ плюс Python как glue language. Java для серьёзной работы с TCP/IP не катит -- она кроссплатформенная, а не все аспекты программирования сокетов переносимы, поэтому Java такие аспекты просто не реализует. Например, таймауты посылки пакетов/записи в сокеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 20:20 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
host.13Забыл уточнить: решение должно работать как на Windows, так и на Linux. Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это? Тем более, С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 20:21 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
>десятки тысяч подключений очевидный erlang очевиден ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 20:27 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Arm79Dmitry V. LiseevСервера стоят намного дешевле, чем оплата труда программиста. Мда. То есть низкую квалификацию программиста и потраченные несколько дней на продумывание архитектуры закрывать тратами на железо? Вы сильно и сильно ошибаетесь. Я бы сказал - катастрофично. Dmitry V. LiseevЯ указал ситуацию, где очереди НЕ ВОЗМОЖНЫ. Что за глупости? А если обработка вашего запроса занимает 10 минут? Вы потеряете коннект просто, ведь есть таймауты на операции. В таком случае запрос только инициирует обращение, а сервер коллбеком (SignalR, к примеру) каждые несколько секунд сообщает о статусе обработки. Так что очереди ВОЗМОЖНЫ Dmitry V. LiseevСтавим вторую БД и вместе они успевают обрабатывать уже 200. Да, гениально. У нас сервер с БД стоит почти пол миллиона баксов. Я себе так и представляю, как прихожу к начальству и говорю, что нужно прикупить второй, так как труд программистов стоит дороже, чем сервер.У меня сервер в облаке несколько десятков баксов в месяц. И если мне надо будет на несколько часов процов ему увеличить или памяти добавить, мне только мышкой тыкнуть. И даже к начальству ходить не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 20:35 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Dmitry V. LiseevУ меня сервер в облаке несколько десятков баксов в месяц. И если мне надо будет на несколько часов процов ему увеличить или памяти добавить, мне только мышкой тыкнуть. И даже к начальству ходить не надо. Тогда может не стоит столь категорично что-то утверждать? Ведь случаи бывают разными. Например, банки в чужом облаке просто не имеют права хранить конфиденциальные данные. А уж облако и интернет-трейдинг вообще понятия не совместимые, из-за большой латентности облака. В общем и целом, предлагаю дальше не углубляться. Свои мнения высказали, остальное - пустой треп. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 20:42 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
Всем большое спасибо. Все, что понятно на текущий момент: очереди обязательны, т.к. прием сигнала нужно отделить от обработки, на с\с++ писать смысла нет, т.к. нужно использовать то, что уже реализовано в netty и mina, а на c\c++ ничего похожего нет. Или есть? softwarerЛично я - однозначно за PHP. ИзопропилPetro123Изопропил, а COM порты используют? в стартовом посте достаточно наличия UDP COM порты упоминать не стал - маловероятно что они напрямую к серверу будут подключаться Имеется в виду только обработка на PHP, а обслуживание транспорта другими инструментами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 22:36 |
|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#18+
host.13Забыл уточнить: решение должно работать как на Windows, так и на Linux. Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это? не технологий а техник/инструментов/методологий/приёмов... клиент-сервер - это технология пхп/джава - инструменты(языки) програмирования задачи решаються методами! если докапываться до слов, то програмист бытывое слово, а если ещо доколупаться Глубже изделие пользователь создатель трактор - тракторист - инженер проектировщик велосипед - велосепедист - инженер фундаментальные течения - фундоменталист - философ создавший программа -- ??? --- ??? раставте слова верно - програмист / инженер :) по кзоту кслову техник-програмист 1,2 разряда/инженер / архитектор то что вы подразумевали под словом програмист - это инженер, и задача у вас инженерная. :) ЗЫ я за, что бы мы переучивались и говорили правильно. и без пантов ...аля технологии :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 17:46 |
|
|
start [/forum/topic.php?all=1&fid=33&tid=1547569]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 273ms |
0 / 0 |