|
На чем делать сокет-сервер?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=33&fpage=14&tid=1547569]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 295ms |
total: | 457ms |
0 / 0 |