Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Сетевые технологии > Одновременный доступ в POP3 ящик из нескольких сес


Автор: Glen 2.2.2010, 16:28
Как ДОЛЖЕН работать POP3 в случае если несколько клиентских сессий одновременно хотят работать с одним и тем же ящиком? RFC 1939 говорит "Once the POP3 server has determined through the use of any authentication command that the client should be given access to the   appropriate maildrop, the POP3 server then acquires an exclusive-access lock on the maildrop, as necessary to prevent messages from being modified or removed before the session enters the UPDATE state".

Но вот я попробовал на имеющемся у меня POP3-сервере - никто не мешает второй сессии получить доступ и работать с ящиком (включая удаление писем). Это что, какое-то расширение? Если да, то где оно специфицировано? Какие тут возможны проблемы? Например: если Сессия#1 хочет читать письмо #N, а оно уже удалено Сессией#2 - что произойдёт? Или: Сессия#1 прочитала письмо #N, хочет его удалить - а за это время Сессия#2 удалила письмо #(N-1), и все номера писем 'сдвинулись'. Какое в действительности письмо будет удалено когда Сессия#1 выдаст команду DELE #N?

Автор: marykone 2.2.2010, 17:24
Glen, посмотрите в сторону imap 

Автор: WolfAlone 3.2.2010, 23:58
Уважаемый Glen! По моему, номера писем не сдвигаются никаким образом, до конца всех активных сессий, то есть, если Вы будете использовать, например, 1-у сессию, в ящике будет 5 писем, вы удалите письмо №2, то второй раз удалить письмо №2 в этой же сессии не получиться! Т.к. оно уже удалено и будут письма только за номерами 1, 3, 4, 5! Если сессия #1 удалило письмо №3, а сессия #2 попытается его прочесть - думаю сервер всего-навсего выдаст ошибку.

По поводу спецификации - по моему это нигде не специфицировано (по крайней мере я не видел).

По поводу сессий >1 - не каждый почтовый сервер позволяет работать с ящиком, в несколько сессий одновременно.

Из личного опыта:
Хреновые почтовые клиенты, при обрыве связи могут получать одни и те же письма, повторно, нормальные - получают только не полученные письма. Исходя из этого, можно предположить, что письма не удаляются с сервера во время активной сессии, удаление происходит только после нормального завершения соединения. По этому, как вариант если сессия 1 удалит письмо №3, а сессия 2 запросит его - то она его получит как ни в чем не бывало! (*КАК ВАРИАНТ!)

Хотя, главной мыслью в этом монологе, считаю то, что - ПО часто строиться по принципу совместимости, а не единых стандартов. То есть, если почтовая программа может получать письма с сервера - значит сервер рабочий. Если 2 программы могут одновременно получать письма с сервера (одного ящика) - от этого быть рабочим он не перестает! И соответственно, каждый сервер может вести себя по своему...

Думаю оптимальным вариантом в Вашем случае будет взять локальный почтовый сервер, прислать на него с 10ок писем мегабайт по 10-100, взять какой-нибудь прокси, ограничить в нем скорость до 1Кб, и попробовать получать/удалять и т.д. одно и то же письмо (письма) с одного и того же ящика. Таким образом Вы выясните, как будет вести себя именно этот сервер в некоторых случаях.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)