Всем добрый день!
Есть что-то готовое не ftp и не http. Хочется иметь программный аналог расшареных папок, но без использования домен-контроллера и сетей windows. Т.е. в идеале: CreateFile ("\\x.x.x.x\path\file", ....); , а удаленная машина доступна лишь через tcp/ip по определенному порту. Извините за сумбур, пока не в теме, совсем.
Здравствуйте, Videoman, Вы писали:
V>Всем добрый день! V>Есть что-то готовое не ftp и не http. Хочется иметь программный аналог расшареных папок, но без использования домен-контроллера и сетей windows. Т.е. в идеале: CreateFile ("\\x.x.x.x\path\file", ....); , а удаленная машина доступна лишь через tcp/ip по определенному порту. Извините за сумбур, пока не в теме, совсем.
Здравствуйте, Ведмедь, Вы писали:
В>Здравствуйте, Videoman, Вы писали:
V>>Всем добрый день! V>>Есть что-то готовое не ftp и не http. Хочется иметь программный аналог расшареных папок, но без использования домен-контроллера и сетей windows. Т.е. в идеале: CreateFile ("\\x.x.x.x\path\file", ....); , а удаленная машина доступна лишь через tcp/ip по определенному порту. Извините за сумбур, пока не в теме, совсем.
В>Http + WebDAV?
По-моему не то. Я могу в такой схеме пользоваться WinAPI ReadFile/WriteFile, ну, или аналогами?
Здравствуйте, Videoman, Вы писали:
V>Здравствуйте, Ведмедь, Вы писали:
В>>Здравствуйте, Videoman, Вы писали:
В>>Http + WebDAV?
V>По-моему не то. Я могу в такой схеме пользоваться WinAPI ReadFile/WriteFile, ну, или аналогами?
Да. И его можно подцепить так же, как обычную расшаренную папку
В>Да. И его можно подцепить так же, как обычную расшаренную папку
Надо будет изучить. А что нужно от клиента на windows?
А насколько это быстро, по сравнению с smb?
Одновременных коннектов будет десятки, файлы десятки гигабайт, потянет?
Здравствуйте, Videoman, Вы писали:
V>Надо будет изучить. А что нужно от клиента на windows?
Какого клиента? Если идет речь про windows pc, то ничего, IE, любой браузер, да и просто explorer поддерживает. WinAPI тоже может принимать в виде пути к файлу http адрес.
V>А насколько это быстро, по сравнению с smb?
Здравствуйте, Ведмедь, Вы писали:
V>>А насколько это быстро, по сравнению с smb?
В>Зависит от многих параметров.
Одновременных коннектов будет десятки, файлы десятки гигабайт, потянет?
Особенно интересует скорость чтения файлов при их одновременной записи. Это одна из причин отказа от SMB, так как в этом случае скорость доступа падает раз в 5 (по причине постоянной синхронизации).
Здравствуйте, Videoman, Вы писали:
V>Здравствуйте, Ведмедь, Вы писали:
V>>>А насколько это быстро, по сравнению с smb?
В>>Зависит от многих параметров.
V>Одновременных коннектов будет десятки, файлы десятки гигабайт, потянет? V>Особенно интересует скорость чтения файлов при их одновременной записи. Это одна из причин отказа от SMB, так как в этом случае скорость доступа падает раз в 5 (по причине постоянной синхронизации).
Как напишете драйвер, так и потянет. Готовых решений нет и не будет. Вы хотите аналог SMB собственный, и для того чтобы ним прозрачно пользоваться WINAPI (т.е. ваш протокол использовался при резолве UNC имени) нужно установить специальный драйвер/клиент который работает именно там. Вот тут вступ https://msdn.microsoft.com/en-us/library/windows/desktop/aa375500%28v=vs.85%29.aspx — дерзайте. Да, под виндой именно так делается, если хотите чтобы винапи его жрало прозрачно. Под Юниксами это делается посредством аналогичного драйвера который монтируется в файловую систему.
Здравствуйте, Videoman, Вы писали:
V>Одновременных коннектов будет десятки, файлы десятки гигабайт, потянет? V>Особенно интересует скорость чтения файлов при их одновременной записи. Это одна из причин отказа от SMB, так как в этом случае скорость доступа падает раз в 5 (по причине постоянной синхронизации).
Раз у тебя настолько специфический случай, то описывай всю исходную задачу. Иначе пустой треп пойдет.
И почему ты решил, что причина в синхронизации (кстати, что это)? По-моему, причина в том, что твое железо тупо не тянет.
Здравствуйте, Videoman, Вы писали:
V>Здравствуйте, Ведмедь, Вы писали:
V>>>А насколько это быстро, по сравнению с smb?
В>>Зависит от многих параметров.
V>Одновременных коннектов будет десятки, файлы десятки гигабайт, потянет? V>Особенно интересует скорость чтения файлов при их одновременной записи. Это одна из причин отказа от SMB, так как в этом случае скорость доступа падает раз в 5 (по причине постоянной синхронизации).
webDAV в данном случае выступит как протокол. А реализацию можно взять готовую (sharepoint, например) или сделать самому. Как сделаешь, так и поплывет.
Здравствуйте, PanychY, Вы писали:
PY>Как напишете драйвер, так и потянет. Готовых решений нет и не будет. Вы хотите аналог SMB собственный, и для того чтобы ним прозрачно пользоваться WINAPI (т.е. ваш протокол использовался при резолве UNC имени) нужно установить специальный драйвер/клиент который работает именно там. Вот тут вступ https://msdn.microsoft.com/en-us/library/windows/desktop/aa375500%28v=vs.85%29.aspx — дерзайте. Да, под виндой именно так делается, если хотите чтобы винапи его жрало прозрачно. Под Юниксами это делается посредством аналогичного драйвера который монтируется в файловую систему.
Правильно ли я понимаю, что провайдер, это просто зарегистрированная DLL экспортирующая несколько нужных функций из списка по вашей ссылке?
А что тогда вот это? Выглядит как прямое отображение на них, нет?
Здравствуйте, wildwind, Вы писали:
W>И почему ты решил, что причина в синхронизации (кстати, что это)? По-моему, причина в том, что твое железо тупо не тянет.
Потому, что если файл не пишется в этот момент, то скорость его чтение вырастает раз в 5. Если это же проделать с локальным файлом, то эффекта не наблюдается, только если читать через SMB.
Здравствуйте, Ведмедь, Вы писали:
В>webDAV в данном случае выступит как протокол. А реализацию можно взять готовую (sharepoint, например) или сделать самому. Как сделаешь, так и поплывет.
CreateFile не может открыть http, по умолчанию, или вы непонятно объясняете. Из соседних ответов я понял что мне нужно реализовывать провайдер самому, правильно?
Здравствуйте, Videoman, Вы писали:
V>Здравствуйте, PanychY, Вы писали:
V>Правильно ли я понимаю, что провайдер, это просто зарегистрированная DLL экспортирующая несколько нужных функций из списка по вашей ссылке?
Да. Только поведение должно быть так как там пишет инструкция. Например особенность этой такая что диспетчер этих всех модулей обращается к ним с двух мест: из процесса который ползуется ресурсами(файлами) который этот провайдер выдает, и также из процесса службы которая заведует этим всем хозяйством(названий не помню, давно это было, читайте документацию). Потому эта DLL должна быть готова что внезапно она размазана про процессам.
Гдето в хидерах есть список констант — имено когда либо известных провайдеров. Если не ошибюсь хидер mprapi.h причастен. В крайнем случае есть функция енумератор активных провайдеров.
Да, у виртуалок есть такая функця "Shared Folder" — вот она этим и пользуется помоему. V>А что тогда вот это? Выглядит как прямое отображение на них, нет?
Не вижу связи. Возможно существует провайдер который пользуется указаным WebDAV API, я не вкурсе. А это WebDAV API скорее всего пользуетя готовым WinInet API реализацие протокола HTTP, ну либо напрямую сокетами.
Здравствуйте, Videoman, Вы писали:
W>>И почему ты решил, что причина в синхронизации (кстати, что это)? По-моему, причина в том, что твое железо тупо не тянет.
V>Потому, что если файл не пишется в этот момент, то скорость его чтение вырастает раз в 5. Если это же проделать с локальным файлом, то эффекта не наблюдается, только если читать через SMB.
Тогда WebDAV тебе тем более не подойдет, там накладные расходы не меньше. Либо используй FTP или подобный протокол (FSP например), где накладных расходов минимум, либо придется мутить что-то свое на сокетах.
Здравствуйте, Videoman, Вы писали:
V>Потому, что если файл не пишется в этот момент, то скорость его чтение вырастает раз в 5. Если это же проделать с локальным файлом, то эффекта не наблюдается, только если читать через SMB.
А толщина канала-то какая, сколько мбит? Какой поток идёт на чтение и на запись? Может оно у вас в 100 мбит ethernet не влазит попросту, а то и в 54 мбит WiFi?
Мне кажется, вы лезете в сторону чего-то очень нетривиального. Чтобы и летало как ракета, и через CreateFile открывалось... и почему же этого до сих пор не сделали-то, к 2017 году, за 20 лет развития SMB? Видимо, это очень сложная задача.
Здравствуйте, wildwind, Вы писали:
W>Тогда WebDAV тебе тем более не подойдет, там накладные расходы не меньше. Либо используй FTP или подобный протокол (FSP например), где накладных расходов минимум, либо придется мутить что-то свое на сокетах.
Так уже давно "замучено" и используется , именно на сокетах и летает. Скорость упирается только в сеть и в железо которое непосредственно записывает. Сейчас просто провожу ревизию. Устал писать свой велосипед дублирующий функции системы. Хочется чего-то стандартного, но легкого. Из-за этого и задал вопрос, может быть что-то появилось.
Здравствуйте, Слава, Вы писали:
С>А толщина канала-то какая, сколько мбит? Какой поток идёт на чтение и на запись? Может оно у вас в 100 мбит ethernet не влазит попросту, а то и в 54 мбит WiFi?
А какая разница. Я читаю без задержек с максимальной скоростью, которую позволяет конфигурация, и расхождение в скорости между самопальным протоколом и SMB на пол порядка, примерно. Это только в том случае. Если читать данные которые пишутся. Если только читать, то разница не существенна.
С>Мне кажется, вы лезете в сторону чего-то очень нетривиального. Чтобы и летало как ракета, и через CreateFile открывалось... и почему же этого до сих пор не сделали-то, к 2017 году, за 20 лет развития SMB? Видимо, это очень сложная задача.
Это вам кажется. Что — не сделано? CreateFile и WINAPI, сам по себе, работает как ракета. Я говорю только про SMB. Он тормозит от того, что реализован "в общем" и рассчитан на все случаи жизни.
Здравствуйте, Videoman, Вы писали:
V>Устал писать свой велосипед дублирующий функции системы.
Ну раз функции системы твою задачу не решают, то никакого дублирования нет, не переживай.
V>Хочется чего-то стандартного, но легкого. Из-за этого и задал вопрос, может быть что-то появилось.
Здравствуйте, Videoman, Вы писали:
V>CreateFile не может открыть http, по умолчанию, или вы непонятно объясняете. Из соседних ответов я понял что мне нужно реализовывать провайдер самому, правильно?
Нет, для доступа по WebDAV в Windows используется готовый Microsoft-WebDAV-MiniRedirector. Он сам перехватывает ваши обращения через механизм доступа к файлам и перенаправляет по WebDAV
За работу этого механизма на клиентской машине отвечает связка MRxDAV драйвер и служба WebClient. К сожалению, у этой связки есть ряд хитростей в настройке, которые в одном месте не описываются (и через UI не настраиваются). Кое-что можно почерпнуть из статьи Неочевидные аспекты использования WebDAV в Windows
Если вы захотите потестировать этот вариант, то можно или подключиться к готовому WebDAV серверу (на сколько я знаю ранее это было у SkyDrive, YandexDrive, может еще у кого...), или настроить IIS на локальной машине. Опять же могу предложить воспользоваться инструкцией по настройке (если не деллали ранее) Шаблоны MS Office в корпоративной сети (часть 2). Использование WebDAV Здесь приведены шаги для настройки на Windows Server 2012, но вообще всё то же самое делается и для пользовательской Windows (только features добавляются иначе и еще я не уверен, для всех ли клиентских версий есть модуль WebDAV)