2015-03-27 1 views
0

Я пытаюсь создать прокси-сервер для буферизации некоторых пакетов в соответствии с некоторыми расписаниями.Создайте буфер в файле для потока пакетов TCP

У меня есть два подключения TCP: один от хоста A до прокси-сервера, а другой - от прокси-сервера к хосту B. Прокси перенаправляет пакеты между A и B. Прокси-сервер будет буферизовать пакеты в соответствии с запланированными инструкциями , В определенное время он будет буферизовать пакеты. По завершении периода буферизации он будет пересылать пакеты в буфер, а также выполнять свою обычную переадресацию. Я использую python. Какой модуль был бы лучшим в этой ситуации? Я пробовал мариновать, но его трудно удалить и добавить элементы в файл. Какие-либо предложения? Благодаря!

+0

Есть ли причина, по которой простой список не хватит? Потому что это займет слишком много памяти? Вы считали ['tempfile'] (https://docs.python.org/2/library/tempfile.html)? – jedwards

+0

@jedwards Два TCP-соединения в прокси-сервере представляют собой два отдельных сценария python. Поэтому мне нужно сохранить пакеты в отдельном файле. Я не знаком с tempfile. Может ли tempfile быть добавлено и удалено частично? – Sammil

+0

Добавлять да, удаление не так просто, но, безусловно, умело. – jedwards

ответ

0

Я рекомендую вам объединить два сценария в один и просто использовать память.

Если вы не можете присоединиться к сценариям по какой-либо причине, создайте сокет unix-domain для передачи необработанных двоичных данных непосредственно из одного в другой. Эти фифы имеют ограниченный размер, поэтому вам все равно придется делать буферизацию в памяти с той или иной стороны, возможно, на стороне B.

Если данные слишком большие для памяти, вы можете записать их во временный файл и перечитать его, когда пришло время передать его. Это будет проще всего, если один и тот же сценарий будет записывать и читать файл, так как вам не придется угадывать, когда писать, переходить к новому файлу или иметь дело с отдельными читателями и писателями.

+0

Сначала я пытался это сделать. У меня было только 3 скрипта на A, прокси и B. Однако я столкнулся с проблемой синхронизации. Я начал прокси-сервер, так как сервер A и A был отправителем, а прокси-сервер также выступал в качестве отправителя B, который выступал в качестве сервера. Когда я начал все 3 сценария (в A, прокси и B), мне нужно было убедиться, что B запущен до прокси-сервера и до сценария A. Если время не получилось правильно, и A слишком долго ждал, пока прокси-сервер начнет принимать пакеты, он закроет сеанс. – Sammil

+0

Итак, я подумал, что может быть проще отделить сценарий приема и пересылки прокси на два. Я знаю, это звучит глупо. Любые решения приветствуются! – Sammil

+0

Да, вам нужно будет заказать запуск A, B и P или добавить код для повторной попытки после некоторого интервала, если он еще не доступен. –

Смежные вопросы