powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / На чем делать сокет-сервер?
35 сообщений из 35, показаны все 2 страниц
На чем делать сокет-сервер?
    #38679556
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует сеть датчиков, расположенных на удаленных объектах, которые через TCP-, UDP- и COM-порты передают определенную информацию к нам в систему. На нашей стороне необходимо разработать сервер, который смог бы держать десятки тысяч подключений по TCP, принимать трафик по UDP-портам с десятков тысяч хостов, принимать трафик с COM-портов, и складывать все в БД. Предполагается писать сервер либо на Java, либо на PHP, либо на Python. Подскажите, какие фреймворки существуют для организации таких серверов на этих языках? Если кто разрабатывал похожие проекты, какую архитектуру использовали?
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38679952
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680252
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На С++ такие вещи пишут.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680258
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я - однозначно за PHP.

П.С. Необходимый вам фреймворк называется "квалифицированный программист". Но это не тот совет, который кто-нибудь когда-нибудь выполняет. "Мы тут решили организовать госпиталь на десять тысяч коек, подскажите, какой стороной скальпель держать" (ц)
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680356
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Если кто разрабатывал похожие проекты, какую архитектуру использовали?
Я делал. На C#. Протокол SSL, около 300 тысяч сообщений в секунду сервер мог обрабатывать... Количество клиентов ограничивалось только ресурсами сервера. Технология очень простая - таски из TPL.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680764
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл уточнить: решение должно работать как на Windows, так и на Linux.

Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это?
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680770
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79host.13Если кто разрабатывал похожие проекты, какую архитектуру использовали?
Я делал. На C#. Протокол SSL, около 300 тысяч сообщений в секунду сервер мог обрабатывать... Количество клиентов ограничивалось только ресурсами сервера. Технология очень простая - таски из TPL.Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много. Нужен многопроцессорный сервер. Подходит при длительных операциях. А если операции короткие, то можно обрабатывать их в одном потоке по очереди. Надо ещё смотреть протокол обмена. Если следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680826
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevМожно на каждое соединение создавать поток
Но не нужно :-) Даже безотносительно длительности операций. Накладные затраты на переключение контекста при десятках тысяч потоков будут очень большими

Dmitry V. LiseevА если операции короткие, то можно обрабатывать их в одном потоке по очереди
+1

Dmitry V. LiseevЕсли следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей.
Условие не обязательно. Можно в любом варианте сделать: "Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей"

Самое главное для ТС обеспечить нужную скорость при работе с БД. Что толку от сервера приложений, если БД не успеет сохранять инфу с десятков тысяч поставщиков информации...
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680828
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Я бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже
чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд".

Ну и как следствие это остаётся та же java или php
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680838
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alЯ бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже
чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд".

:-) Хе-хе. Ну для говноконтор разумеется, там может и крякнутая винда стоять. Пичалька.

PS Никто не мешает сделать код под Mono, и запускать где угодно. Я делал. Работает. Даже на отвратной винде...
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680856
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79irbis_alЯ бы советовал не делать на винде...ибо общеизвестно,что наработка на отказ в этой ОС на порядок ниже
чем у других. Ещё с червями и вируснёй бороться..что называется "Контора напрасный труд".

:-) Хе-хе. Ну для говноконтор разумеется, там может и крякнутая винда стоять. Пичалька.

PS Никто не мешает сделать код под Mono, и запускать где угодно. Я делал. Работает. Даже на отвратной винде...

MONO это дополнительно звено,дополнительная прослойка,
которая так же понижает наработку на отказ.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680859
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,

Java, PHP и прочие языки - тоже прослойка, которая понижает работу на отказ. Так что эталон надежности - программа на assembler
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38680863
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это?
Программист - широкое понятие. Один и тот же человек может быть гуру в одной конторе и не дотягивать до миддла в другой. Вам нужен человек, который умеет это делать или, по крайней мере, может разобраться и выдать разумные суждения. А как будет называться его должность - дело двадцатое. Мне, например, регулярно приходят вакансии, в которых основной работой архитектора считается написание идиотских бумажек.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682293
mvn3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry V. Liseev,

>>Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много

А объектный пул не?
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682415
drDaemon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использовал в нескольких проектах для игрового сокет сервера Python. Twisted. Реализуется быстро. Легко можно апгрейдить до бесконечно большого количества одновременных коннектов. Ну а если у него не хватит силенок - то С(++). Многое зависит от конкретной задачи.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682441
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682936
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЛично я - однозначно за PHP.
интересная мысль, с учётом того, что датчики не используют HTTP
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682945
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
а COM порты используют?
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682947
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Изопропил,
а COM порты используют?

в стартовом посте достаточно наличия UDP
COM порты упоминать не стал - маловероятно что они напрямую к серверу будут подключаться
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682951
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилмаловероятното-то и оно, что у аффтара мешанина в голове по ТЗ.
А к ТЗ подходят всегда буквально и дотошно.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682960
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Dmitry V. LiseevМожно на каждое соединение создавать потокНо не нужно :-) Даже безотносительно длительности операций. Накладные затраты на переключение контекста при десятках тысяч потоков будут очень большимиЗависит от длительности операций. Сравните архитектуру apache и nginx. Накладные затраты - не проблема. Задача легко масштабируется. Поставим сотню серверов.

Arm79Dmitry V. LiseevЕсли следующие операции не зависят от предыдущих (датчик просто выдал данные и ничего не ожидает в ответ), то можно буферные очереди организовать. Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей.Условие не обязательно. Можно в любом варианте сделать: "Одни потоки принимают данные и складывают в очереди, другие потоки обрабатывают данные из очередей"Обязательное. Если я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужны. А вот если я жму кнопку и мне не важен ответ, то можно поставить запрос в очередь и через пару-тройку часов переслать мне результат мылом.

Если запросы можно переупорядочивать, то очереди делаются в зависимости от предполагаемой длительности операции, приоритета, и т.д.
Arm79Самое главное для ТС обеспечить нужную скорость при работе с БД. Что толку от сервера приложений, если БД не успеет сохранять инфу с десятков тысяч поставщиков информации...Тут дело в колебаниях скорости. Допустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо. Для этого нужны очереди и буфера. Ещё учебник по теории массового обслуживания.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682961
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvn3Dmitry V. Liseev,

>>Тут принцип простой. Можно на каждое соединение создавать поток. Тогда их будут десятки тысяч. Ресурсов пожрёт много

А объектный пул не?Зависит от архитектуры системы и протоколов обмена данными.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682965
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevЗадача легко масштабируется. Поставим сотню серверов.
А вы из своего кармана будете оплачивать покупку серверов?

Dmitry V. LiseevЕсли я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужны
очереди НЕ ОБЯЗАТЕЛЬНЫ. Но возможны.

Dmitry V. LiseevДопустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо.
А если БД успевает обработать 100 штук операций в минуту, а извне приходит 110?
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682983
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам определенно нужно смотреть в сторону Event-Driven парадигмы. Подход "одно соединение -- один поток" быстро откушает всю память, а процессор будет в основном заниматься переключением контекстов.

Я не знаю, как там в PHP, но для Питона есть Twisted, для Java есть Netty и Mina. Есть еще хипстерскый Node.js
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38682990
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Dmitry V. LiseevЗадача легко масштабируется. Поставим сотню серверов.А вы из своего кармана будете оплачивать покупку серверов?Сервера стоят намного дешевле, чем оплата труда программиста.

Arm79Dmitry V. LiseevЕсли я лезу на сайт, жму кнопку, и жду ответа перед тем, как нажать следующую, то очереди не нужныочереди НЕ ОБЯЗАТЕЛЬНЫ. Но возможны.Я указал ситуацию, где очереди НЕ ВОЗМОЖНЫ.

Arm79Dmitry V. LiseevДопустим, БД успевает обрабатывать 100 тыс. операций в минуту. Поток от датчиков 70 тыс. Всё хорошо. Потом кратковременно поток подскакивает до 300 тыс. и всё уже плохо.А если БД успевает обработать 100 штук операций в минуту, а извне приходит 110?Ставим вторую БД и вместе они успевают обрабатывать уже 200.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683025
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevСервера стоят намного дешевле, чем оплата труда программиста.
Мда. То есть низкую квалификацию программиста и потраченные несколько дней на продумывание архитектуры закрывать тратами на железо? Вы сильно и сильно ошибаетесь. Я бы сказал - катастрофично.
Dmitry V. LiseevЯ указал ситуацию, где очереди НЕ ВОЗМОЖНЫ.
Что за глупости? А если обработка вашего запроса занимает 10 минут? Вы потеряете коннект просто, ведь есть таймауты на операции. В таком случае запрос только инициирует обращение, а сервер коллбеком (SignalR, к примеру) каждые несколько секунд сообщает о статусе обработки. Так что очереди ВОЗМОЖНЫ
Dmitry V. LiseevСтавим вторую БД и вместе они успевают обрабатывать уже 200.
Да, гениально. У нас сервер с БД стоит почти пол миллиона баксов. Я себе так и представляю, как прихожу к начальству и говорю, что нужно прикупить второй, так как труд программистов стоит дороже, чем сервер.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683082
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилsoftwarerЛично я - однозначно за PHP.
интересная мысль, с учётом того, что датчики не используют HTTP

а причем тут http?
мультиплексирующий пре-fork на количество ядер сокет-сервер с libevent, принимающий tcp|udp и еще кучу всего, легко.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683084
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут первоначальный вопрос вот какой:

Каков допустимый лаг в появлении данных?
только реалтайм или есть допустимое окно?

от этого стоит плясать.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683158
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Существует сеть датчиков, расположенных на удаленных объектах, которые через TCP-, UDP- и COM-порты передают определенную информацию к нам в систему. На нашей стороне необходимо разработать сервер, который смог бы держать десятки тысяч подключений по TCP, принимать трафик по UDP-портам с десятков тысяч хостов, принимать трафик с COM-портов, и складывать все в БД. Предполагается писать сервер либо на Java, либо на PHP, либо на Python. Подскажите, какие фреймворки существуют для организации таких серверов на этих языках? Если кто разрабатывал похожие проекты, какую архитектуру использовали?

На С надо писать, или на С++.

Либо на С/С++ плюс Python как glue language.

Java для серьёзной работы с TCP/IP не катит -- она кроссплатформенная, а не все аспекты программирования сокетов переносимы, поэтому Java такие аспекты просто не реализует.

Например, таймауты посылки пакетов/записи в сокеты.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683159
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Забыл уточнить: решение должно работать как на Windows, так и на Linux.

Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это?

Тем более, С++.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683163
>десятки тысяч подключений

очевидный erlang очевиден
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683168
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Dmitry V. LiseevСервера стоят намного дешевле, чем оплата труда программиста.
Мда. То есть низкую квалификацию программиста и потраченные несколько дней на продумывание архитектуры закрывать тратами на железо? Вы сильно и сильно ошибаетесь. Я бы сказал - катастрофично.
Dmitry V. LiseevЯ указал ситуацию, где очереди НЕ ВОЗМОЖНЫ.
Что за глупости? А если обработка вашего запроса занимает 10 минут? Вы потеряете коннект просто, ведь есть таймауты на операции. В таком случае запрос только инициирует обращение, а сервер коллбеком (SignalR, к примеру) каждые несколько секунд сообщает о статусе обработки. Так что очереди ВОЗМОЖНЫ
Dmitry V. LiseevСтавим вторую БД и вместе они успевают обрабатывать уже 200.
Да, гениально. У нас сервер с БД стоит почти пол миллиона баксов. Я себе так и представляю, как прихожу к начальству и говорю, что нужно прикупить второй, так как труд программистов стоит дороже, чем сервер.У меня сервер в облаке несколько десятков баксов в месяц. И если мне надо будет на несколько часов процов ему увеличить или памяти добавить, мне только мышкой тыкнуть. И даже к начальству ходить не надо.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683175
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevУ меня сервер в облаке несколько десятков баксов в месяц. И если мне надо будет на несколько часов процов ему увеличить или памяти добавить, мне только мышкой тыкнуть. И даже к начальству ходить не надо.
Тогда может не стоит столь категорично что-то утверждать? Ведь случаи бывают разными. Например, банки в чужом облаке просто не имеют права хранить конфиденциальные данные. А уж облако и интернет-трейдинг вообще понятия не совместимые, из-за большой латентности облака.

В общем и целом, предлагаю дальше не углубляться. Свои мнения высказали, остальное - пустой треп.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38683209
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо. Все, что понятно на текущий момент: очереди обязательны, т.к. прием сигнала нужно отделить от обработки, на с\с++ писать смысла нет, т.к. нужно использовать то, что уже реализовано в netty и mina, а на c\c++ ничего похожего нет. Или есть?

softwarerЛично я - однозначно за PHP.


ИзопропилPetro123Изопропил,
а COM порты используют?

в стартовом посте достаточно наличия UDP
COM порты упоминать не стал - маловероятно что они напрямую к серверу будут подключаться

Имеется в виду только обработка на PHP, а обслуживание транспорта другими инструментами.
...
Рейтинг: 0 / 0
На чем делать сокет-сервер?
    #38694674
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
host.13Забыл уточнить: решение должно работать как на Windows, так и на Linux.

Softwarer, разве программист, который имеет достаточный кругозор, чтобы сказать, при помощи каких технологий решать ту или иную задачу, называется программистом? Не архитектор ли это?

не технологий а техник/инструментов/методологий/приёмов...

клиент-сервер - это технология
пхп/джава - инструменты(языки) програмирования
задачи решаються методами!
если докапываться до слов, то програмист бытывое слово, а если ещо доколупаться Глубже

изделие пользователь создатель
трактор - тракторист - инженер проектировщик
велосипед - велосепедист - инженер
фундаментальные течения - фундоменталист - философ создавший

программа -- ??? --- ???
раставте слова верно - програмист / инженер :)
по кзоту кслову техник-програмист 1,2 разряда/инженер / архитектор

то что вы подразумевали под словом програмист - это инженер, и задача у вас инженерная. :)

ЗЫ
я за, что бы мы переучивались и говорили правильно. и без пантов ...аля технологии :)
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / На чем делать сокет-сервер?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]