2014-09-15 3 views
-1

Мы создаем веб-приложение, которое находится между почтовым клиентом и почтовым сервером, обрабатывающим вызовы IMAP (в основном мы заботимся о SELECT и LIST). Но когда пользователь делает FETCH, мы предпочли бы, чтобы возвращаемые данные не проходили через наш сервер, чтобы сократить использование полосы пропускания.Есть ли способ передать TCP-соединение?

Есть ли способ, с помощью которого запрос может быть прямым? Или изменить его таким образом, чтобы ответ передавался непосредственно отправителю?

(Мы делаем это в C#, хотя я сомневаюсь, что имеет какое-либо отношение к этому вопросу.)

ответ

0

Это не будет работать, по трем причинам:

  1. IMAP является асинхронным и может иметь несколько команд в полете за один раз, поэтому клиент может выдать FETCH, а затем выдавать другие команды, в том числе LIST, ожидая завершения FETCH.

  2. , даже если клиент посылал только одну команду за раз, вам все равно придется следить за соединениями, чтобы узнать, когда завершено завершение FETCH, чтобы вы могли вернуться к обработке SELECT/LIST.

  3. ваше приложение имеет два отдельных TCP-соединения - один между собой и клиентом, а один между собой и сервером. Невозможно связать эти соединения, чтобы удалить приложение из этой сети. Если ваше приложение хочет выбыть, оно должно закрыть эти соединения.

Так что нет, вы не можете «передать» данные. Пока ваше приложение подключено к клиенту и серверу, все данные должны проходить через ваше приложение, независимо от того, обрабатываете вы его или нет. Это просто характер работы прокси-сервера TCP/туннеля.

+0

Это тоже мое понимание, но я подумал, что лучше спросить, если бы было что-то, чего я не знал (я компетентен в сокетах, но никак не эксперт). Я надеялся, что есть способ каким-то образом вернуть ответ обратно. О, хорошо ... Спасибо. –