Как распараллелить tcp запросы?

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

polosat
Сообщения: 2

Как распараллелить tcp запросы?

Сообщение polosat »

Имеется такая задача, не знаю как решить:

Некая программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт. Необходимо ловить эти запросы на сервере, и в неизменном виде передавать на два других других сервера. Пытаюсь копать в сторону netcat и nettee, но пока не соображу, как это сделать, и возможно ли в принципе.

Подскажите, как это можно сделать?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как распараллелить tcp запросы?

Сообщение sash-kan »

polosat писал(а):
01.05.2009 20:26
программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт

потрясающе. это называется syn flood: http://en.wikipedia.org/wiki/SYN_flood

p.s. вы ничего в своём сообщении не напутали?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
polosat
Сообщения: 2

Re: Как распараллелить tcp запросы?

Сообщение polosat »

sash-kan писал(а):
01.05.2009 23:52
потрясающе. это называется syn flood: http://en.wikipedia.org/wiki/SYN_flood
p.s. вы ничего в своём сообщении не напутали?

Видимо напутал :)
Я имел в виду следующее:
Например, если взять HTTP, то клиент отправляет GET, а сервер возвращает ему данные.
В моём случае клиент шлёт данные серверу, тот их просто обрабатывает, а клиенту ничего не возвращает.
Т.е. сервер не шлёт ответов на уровне приложения. На уровне TCP, конечно, всё в порядке.

А задача стоит такая: все запросы, которые присылает клиент не обрабатывать, а форвардить дальше на два других сервера, каждый из которых уже и обработает эти данные.
У меня пока получилось что-то типа такого:

Код: Выделить всё

nc -l -p 1000 | tee >(nc host1.com 1000)|(nc host2.com 1000)

Но как-то мне это кажется кривым :(
Да и если клиент закрывает соединение, то слушающий nc тоже отваливается, а мне надо, чтобы он постоянно слушал порт. Т.е. надо сверху ещё цикл как-то нагромождать.
Хочется найти надёжное и красивое решение этой задачи.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как распараллелить tcp запросы?

Сообщение sash-kan »

если вам нужна особая реакция на уровне приложения, то самым логичным и будет работать именно на этом уровне.
как вариант:
с помощью rewriteengine заворачивайте нужные вам get-запросы на какой-нибудь скрипт (на удобном вам языке). а если клиент настраиваем, то без всякого заворота, напрямую делайте get <скрипт>.
естественно, httpd должен понимать, чего с этим скриптом делать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: Как распараллелить tcp запросы?

Сообщение sim1 »

Сложно въехать в постановку вопроса. Возможно вам стоит ознакомится с таким вопросом, как балансировка нагрузки ? Чего вы хотите решить, получив ответ на вашу "задачу" ? Опишите суть вашей проблемы (чего от вас хочет ваш "заказчик" :smile3: ? ) ...
Спасибо сказали: