|
|
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
Добрый день коллеги, не знал куда поместить этот вопрос, но по логике: "Кто работает со скриптами, чаще всего работает с web-серверами", запихнул сюда. Дано: Описан протокол взаимодействия с веб сервером. Основан на TCP (на транспортном уровне OSI). Парсятся бинарные данные запроса, ответ также в виде бинарных пакетов (фиксированного размера). Нужно работать с сокетами на низком уровне. Особые условия Коннекты (открытые сокеты) нужно держать очень долго (например час). Соединение может рваться, но при восстановлении, и получении очередного байта подтверждения - продолжать передавать оставшиеся пакеты. Нужно реализовать TCP сервер. В web-программировании не новичок совсем, но с подобными задачами еще не сталкивался. Мои идеи: 1. Использование Nginx + tcp_proxy_module https://github.com/yaoweibin/nginx_tcp_proxy_module , HAProxy и Php workers Тут Nginx или HAProxy должен держать открытые сокеты и передавать пакеты. Тут вопрос в размере передаваемых блоков и коде байта подтверждения (не уверен, что это можно нативно настроить, но буду очень рад, если вы мне подскажите как) 2. Написание собственного асинхронного не блокирующего tcp-сервера. Тут вариантов много - node.js, С++ и даже Php c libevent-библиотекой. Бизнес-логику выносим в отдельный демон на php. P.s. Я не прошу полного ответа, просто возможно вы меня натолкнете на верное(и главное стабильное) архитектурное решение. К чему стоит еще присмотреться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 19:49 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
несильно понятно в чес собственно вопрос. авторКоннекты (открытые сокеты) нужно держать очень долго (например час). если дохрена соединений то кроме nginx альтернатив я вопщем то и не знаю. на чем бизнес логику писать - личное дело каждого. если не сильно критична скорость работы то лучше на каком нибудь скриптовом языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 23:56 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Вопрос в архитектуре сервера. Как ее грамотнее построить. Просто возможно кто-то поделится своим опытом/знаниями. Не хочу по недостатку опыта наломать дров. с nginx-отлично, для http протокола. Но тут свой протокол. авторТут вопрос в размере передаваемых блоков и коде байта подтверждения (не уверен, что это можно нативно настроить, но буду очень рад, если вы мне подскажите как) Пример - клиент запрашивает данные, сервер передает запрос вокеру. И тут самое интересное - 1. Клиент запросил данные 2. Сервер передает запрос вокеру. Вокер отдал серверу нужные бинарные данные. 3. Ответ сервера - первый пакет - размер последующих передаваемых данных. 4. Далее данные идут блоками фиксированного размера. После обработки каждого блока клиент возвращает байт подтверждения. Этот процесс может быть очень долгим и сопровождаться задержками. Все это должен делать не блокирующий сервер. Так вот, я не уверен, что nginx возможно так настроить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 00:13 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
geonew, погуглите про node.js ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 05:49 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
geonew, а при чем тут РНР и при чем тут Nginx (который в первую очередь http сервер)? Если есть вариант С++, можно его использовать - для работы с сокетами на низком уровне вполне подходит. А действительно необходимо использование асинхронного не блокирующего tcp-сервера? Если одновременно подключеных клиентов до нескольких сотен, можно спокойно запустить по потоку на каждого и не париться. Конечно если надо обслуживать тысячи одновременных коннектов, тогда да, надо делать асинхронный сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 10:10 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
?geonew, а при чем тут РНР и при чем тут Nginx (который в первую очередь http сервер)? Если есть вариант С++, можно его использовать - для работы с сокетами на низком уровне вполне подходит. А действительно необходимо использование асинхронного не блокирующего tcp-сервера? Если одновременно подключеных клиентов до нескольких сотен, можно спокойно запустить по потоку на каждого и не париться. Конечно если надо обслуживать тысячи одновременных коннектов, тогда да, надо делать асинхронный сервер. Да, тысячи. Я писал - Nginx + tcp_proxy_module. Не работал с этим модулем, но пишут что может на низком уровне работать. А почему не Php? Я изолирую бизнес-логику и сервер. Вот бизнес логика как рез будет на Php. Я в чем то не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 10:45 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
geonew Не работал с этим модулем, но пишут что может на низком уровне работать. Сорри. Умеет работь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 12:04 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
geonew, proxy позволяет прокидывать входящие соединения на свой сервер, который все равно нужен. Вы его на РНР собрались писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 12:16 |
|
||
|
(Tcp-server)Вопрос по реализации
|
|||
|---|---|---|---|
|
#18+
?geonew, proxy позволяет прокидывать входящие соединения на свой сервер, который все равно нужен. Вы его на РНР собрались писать? Я знаю. У nginx есть perl_modules через которые можно (но нужно ли..) сделать логику. Я думаю на чем писать. Люди и на php с libevent пишут. На чем-для меня пока открытый вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 13:46 |
|
||
|
|

start [/forum/search_topic.php?author=Method+chaining&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
85ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 683ms |
| total: | 911ms |

| 0 / 0 |
