FTP-протокол - удобное и популярное средство для передачи и скачивания данных с удаленных или Современные FTP-программы позволяют выполнять все те же операции с документами, которые пользователь обычно производит в "Проводнике". В статье приведен обзор нескольких FTP-клиентов.

SmartFTP Client - выбор профессионалов

Разработчики SmartFTP постоянно совершенствуют свое детище. С выходом каждой новой версии стабильность работы повышается. Время от времени в приложение добавляются новые функции. прост, поэтому утилита подойдет и для неискушенных пользователей. Русскоязычная локализация по умолчанию включена в комплектацию.

Программа для работы с FTP позволяет подключаться сразу к нескольким серверам. В нее встроен текстовый редактор, который подойдет для внесения мелких правок в HTML-код без необходимости запуска "тяжеловесных" приложений.

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

Единственный минус программы - ее цена. Тратить на такой продукт почти 37 долларов захочется не каждому. Поэтому программу можно рекомендовать профессиональным разработчикам сайтов.

Cute FTP

Cute FTP - программа для работы с FTP-сервером. Ее интерфейс удобен и прост. Богатый функционал делает возможным использование утилиты для профессиональных целей. Приложение поддерживает шифрование 128-разрядным ключом. Вместе с программой поставляется подробное справочное пособие. Оно поможет разобраться в тонкостях работы с клиентом пользователям любой квалификации.

Особенности Cute FTP

Как и другие FTP-программы, Cute FTP покажет все файлы, расположенные на сервере, сразу же после установки подключения. Список может быть отсортирован по определенным критериям. Документы большого объема загружаются частями. Скорость закачки файлов в таком режиме выше по сравнению с классическим методом. Сжатие документов также способствует уменьшению времени скачивания и загрузки.

В утилиту встроена система настраиваемого поиска файлов на сервере - такой функцией обладают немногие FTP-программы. Внутренний редактор поможет изменить код веб-страниц или текстовых документов. Программа поддерживает подключение к серверам через прокси. Настраиваемый планировщик призван автоматизировать процесс

Для каталогов, расположенных на сервере, можно создать закладки. Утилита позволяет настраивать подключения с сохранением настроек, но, если этого не требуется, достаточно ввести IP или доменное имя в адресную строку клиента. Неискушенные пользователи с легкостью сконфигурируют подключение при помощи пошагового мастера.

ALFTP - простой и бесплатный FTP-клиент

Пользователям, которым FTP-клиенты профессионального уровня не нужны, стоит обратить внимание на ALFTP. Конечно, это не лучшая FTP-программа, но в ней организован минимальный функционал, которого будет достаточно для большинства пользователей. Разработчикам утилита покажется неинтересной.

Благодаря русскому интерфейсу и минимуму функций, освоить клиент совсем не сложно. ALFTP отобразит иерархию каталогов и файлы, хранящиеся на FTP-сервере, сразу же после подключения к оному. Утилита позволяет выполнять основные файловые операции: копирование, удаление, загрузку, скачивание, переименование. Встроенный редактор текста работает только с документами, скачанными на локальный компьютер. Программа умеет докачивать файлы, однако воспользоваться этой функцией можно только после корректного завершения загрузки. Если сбой в копировании произойдет по непредвиденным причинам, докачать файл будет невозможно.

Утилита добавляет адреса серверов, с которыми было установлено соединение, в список посещений. В этом перечне для пользователя доступно создание собственных ссылок и закладок. Операции с файлами могут выполняться привычным перетаскиванием, как в "Проводнике". В программу встроены базовые средства автоматизации: выключение программы после завершения загрузки документов, разрыв интернет-соединения,

Total Commander

Функционал Total Commander, направленный на работу с FTP, обеспечивает пользователя возможностями, которые могут предоставить не все бесплатные FTP-программы. Утилита умеет не только загружать и выгружать файлы, но и передавать их от сервера к серверу напрямую. Приложение поддерживает шифрование трафика ключами SSL и TLS.

Для соединения с сервером достаточно ввести адрес, логин и пароль в специальный диалог. Чтобы его вызвать, используется сочетание "CTRL+F". Все операции с файлами на сервере выполняются так же, как и с документами на локальном диске.

Для автоматизации в программе организован планировщик. FTP-сервер может использоваться в качестве хранилища резервных копий, для этого в утилите предусмотрены настройки Встроенный текстовый редактор работает только с локальными документами.

Filezilla ftp client – это прекрасная программа для доступа к серверу хостинга, на котором находится ваш сайт, через ftp соединение. Я бы даже сказал так – это необходимая программа, которая нужна любому вэб-мастеру. Если вы, уважаемый читатель, еще не умеете работать с программой filezilla ftp client , то я настоятельно советую вам научиться, и вы сами увидите, как просто, легко и удобно работать с filezilla ftp client . Об этой программе данная статья.

Лично я уже давненько слышал о программе filezilla ftp client, но не пользовался ей. Около года назад я все-таки решил попробовать работать с filezilla ftp client и просто влюбился в эту программу.

Небольшое отступление: ftp (File Transfer Protocol) соединение – это метод соединения и перемещения файлов через интернет. В данном случае, программа filezilla ftp client позволяет все это проделывать между компьютером и сервером вашего хостинга, на котором находится ваш вэб-ресурс.

С помощью программы filezilla ftp client запросто делается масса операций с сайтом: подключается соединение вашего сайта с хостингом через ftp client; смена права доступа к элементам (папкам, файлам), находящимся на хостинге; создание, переименовывание, удаление файлов сайта; скачивание и закачивание любых файлов с вашего персонального компьютера на хостинг и наоборот; редактирование всех файлов и папок вашего вэб-сайта с помощью программы notepad++ (именно с помощью этого блокнота рекомендуется редактировать программные коды во избежание ошибок).

Скачать программу filezilla ftp client можно будет по ссылке, которая приведена в заключительной части статьи. В той же части статьи, уважаемый читатель, вы найдете и ссылку, по которой можно будет скачать и программу notepad++ (необходимого приложения к программе filezilla ftp client).

Сначала я покажу, как настроить filezilla ftp client правильно, а затем расскажу, как работать с filezilla ftp client. Свой рассказ я буду сопровождать для наглядности скриншотами.

В процессе настройки filezilla ftp client будет проходить и ваше знакомство с программой, уважаемый читатель.

Как настроить filezilla ftp client.

После установки и открытия программы необходимо будет сделать некоторые настройки, позволяющие подключить filezilla ftp client к серверу вашего хостинга. Для этого нужно нажать кнопку ФАЙЛ (на скриншоте – 1 обозначена красной стрелкой) и в выпавшем меню выбрать функцию МЕНЕДЖЕР САЙТОВ.

В программе filezilla ftp client откроется новое окно (скриншот – 2), где выполняем настройки по порядку:

1. Нажать кнопку НОВЫЙ САЙТ.

2. Вверху появится надпись «новый сайт», где можно ввести название своего сайта или написать, например, МОЙ САЙТ (когда вы запустите программу filezilla ftp client и нажмете на это название сайта, то произойдет автоматическое подключение программы к серверу хостинга).

3. В это поле записывается IP хостинга, либо адрес своего хостинга (эти данные можно узнать либо в панели управления на хостинге, либо в письме, которое вы получили при своей регистрации на хостинге).

4. В поле ТИП ВХОДА вместо АНОНИМНЫЙ выбираете НОРМАЛЬНЫЙ (нажмите на уголок справа и в выпавшем меню выбирайте нужный пункт).

5. В поля ПОЛЬЗОВАТЕЛЬ и ПАРОЛЬ вводятся свои данные, под которыми вы заходите в аккаунт своего хостинга.

6. Для сохранения введенных данных нажмите кнопку СОЕДИНИТЬСЯ.

Теперь соединяться ваш компьютер с сервером хостинга будет при нажатии на треугольник (скриншот - 3, красная стрелка) и выборе названия вашего вэб-ресурса.

Все, теперь настройка программы filezilla ftp client выполнена. Но нам нужно будет правильно «привязать» filezilla ftp client к notepad++, чтобы грамотно проводить редактирование файлов. А раз надо «привязать», то и будем «привязывать».

Зачем нужно делать редактирование файлов? Да мало-ли для чего! Например, чтобы подправить какой-либо файл, переименовать файл и т.д.

Для этого нужно будет скачать и установить на компьютер программу блокнота notepad++ (ссылка на скачивание – в конце данной статьи). «Привязка» notepad++ к filezilla ftp client для наглядности показана на скриншоте – 4.

1. В программе filezilla ftp client нажимаете кнопку РЕДАКТИРОВАНИЕ и в выпавшем списке выбираете функцию НАСТРОЙКИ, открывается окно с одноименным названием (НАСТРОЙКИ).

2. В открывшемся окне НАСТРОЙКИ выбираете слева функцию ПРАВКА ФАЙЛОВ.

3. В открывшемся справа окне выбираете функцию ИСПОЛЬЗОВАТЬ СЛЕДУЮЩИЙ РЕДАКТОР, где, нажав кнопку ОБЗОР, выбираете установленную на вашем компьютере программу notepad++. Нажимаете кнопку ОК, чтобы ваши настройки сохранились.

Все, «привязка» сделана, и теперь при редактировании файлов в filezilla ftp client всегда будет открываться программа блокнота notepad++.

Как изменить права доступа к файлам в filezilla ftp client.

Небольшое отступление: на сервере вашего хостинга у каждого файла имеются определенные права, что означает действия, которые возможны в отношении данного файла (например, читать, запускать или записывать). И вот тогда, когда к данному файлу не прописаны определенные действия, то они не будут выполняться на сервере хостинг-провайдера, т.е. изменение права доступа к файлу сделать не получится.

Для изменения права доступа к файлу вам достаточно будет выделить нужный файл правой кнопкой (красная стрелка на скриншоте – 5) и в выпавшем меню выбрать функцию ПРАВА ДОСТУПА К ФАЙЛУ.

Перед вами открывается окно ИЗМЕНИТЬ АТРИБУТЫ ФАЙЛА (скриншот - 6), где можно будет проставить крыжики в нужных вам чек-боксах в нужном порядке или ввести числовое значение. Сохранить настройки. Полный доступ будет предоставлять права с числовым значением 777.

В программе filezilla ftp client доступ прав к папкам имеет один нюанс. Если в папке (доступ прав к которой вы желаете изменить) есть какие-либо вложения (файлы или подпапки), то вы должны для себя решить, – нужно ли вам перенаправлять устанавливаемые права доступа к ним, или же к ним будут применены иные права доступа.

Если вами в функции ПЕРЕНАПРАВИТЬ ВО ВЛОЖЕННЫЕ КАТАЛОГИ будет поставлен крыжик, то права доступа будут установлены для всего содержимого папки (каталога).

НЕОБХОДИМО после всех внесенных изменений вернуть права доступа в изначальное положение. Это ОБЯЗАТЕЛЬНО НУЖНО сделать для безопасности вашего вэб-ресурса!!!

Как работать с filezilla ftp client.

Работать с программой filezilla ftp client легко и просто. Возможно, что с первого раза у вас, уважаемый читатель, возникнут трудности в работе. Но это только в первый раз, поработав несколько раз, вы очень быстро освоите filezilla ftp client и будете только радоваться жизни вэб-мастера.

Слева в программе filezilla ftp client есть окно ЛОКАЛЬНЫЙ САЙТ – это ваш компьютер. В этом окне можно открывать диски вашего компьютера, содержимое которых (файлы и папки) будет показано «в дереве» в окне, которое расположено тоже слева, но чуть ниже.

В правом верхнем окне УДАЛЕННЫЙ САЙТ программа filezilla ftp client показывает ваш вэб-ресурс (сайт/блог). В этом окне можно открывать содержимое (файлы и папки) вашего вэб-ресурса.

Содержимое из левого нижнего окна (ваш компьютер) можно перемешать (зажать левой кнопкой мыши) в правое нижнее окно (ваш вэб-ресурс). Также можно делать и другие действия (например, переименовать, удалить).

Если же вы хотите сделать какие-либо изменения в файлах вашего вэб-ресурса с помощью программы filezilla ftp client, то выделите нужный вам файл (скриншот – 5), щелчком правой кнопки мыши, и из выпавшего меню выберите функцию ПРОСМОТР/ПРАВКА.

Тогда нужный вам файл откроется в блокноте notepad++, где вы и сможете сделать все предстоящие редактирования (в качестве примера приведен скриншот – 7). Notepad++ поможет вам избежать проблем с вэб-ресурсом, если вы сделаете какие-либо неправильные изменения в кодах (можно вернуть назад на нужное количество шагов изменений и вэб-ресурс восстановится в значениях, предшествующих редактированию).

Если все изменения (редактирование) в кодах вы сделали и проверили, что ваш вэб-ресурс работает нормально («не поплыл» и его не перекосило), то сохраняете изменения в notepad++, переходите обратно в filezilla ftp client и программа говорит вам обо всех проделанных изменениях, жмете на слово ДА.

Смотрим опять скриншот – 5. Если вы выделите какой-либо файл правой кнопкой мыши, то в выпавшем меню вы сможете выбрать еще некоторые действия: создать файл, создать каталог (папку), удалить, переименовать.

Вот так работает программа filezilla ftp client.

РЕКОМЕНДУЮ ВСЕМ ВЭБ-МАСТЕРАМ ОТЛИЧНУЮ ПРОГРАММУFILEZILLA FTP CLIENT!!!

Итак, уважаемый читатель, в данной статье вы познакомились с прекрасной программой filezilla ftp client, с помощью которой можно легко удаленно работать со своим вэб-ресурсом, а также узнали, как настроить filezilla ftp client, как работать с filezilla ftp client непосредственно.

Советую всем, кто еще не умеет работать с filezilla ftp client, освоить эту программу, которая значительно облегчит жизнь любому вэб-мастеру.

PS. Некоторые вэб-мастера в качестве ftp client пользуются программой Total Commander (ftp встроен в этот файловый менеджер). Но я как-то однажды читал мнение некоторых авторитетных людей, что на Total Commander плохо хранятся введенные пароли доступа к серверу (они могут быть украдены).

Есть и еще одна программа, с помощью которой можно проделывать подобные операции. Она называется cuteFTP, но filezilla ftp client для начинающего вэб-мастера будет как раз то, что надо, т.к. она значительно проще для изучения и работы (не содержит «крутых наворотов»).

Протокол FTP стремительно теряет свои позиции среди пользователей, которые используют передачу файлов между собой в сети интернет. Но он по-прежнему полезен для передачи файлов с компьютера на компьютер, а также неизменно является номером один при загрузке файлов на веб-хост. Особенно фтп прижился у владельцев, разработчиков, контент-менеджеров сайтов, которые работают на Windows, и которые никак не хотят использовать SSH.

Постоянный опыт работы с FTP неизменно приводит каждого пользователя к использованию FTP-приложения. Попробовав один раз, никто более не отказывается от FTP-приложения. Ведь с ним экономия времени по передачи файлов видна не вооружённым глазом. Да и к тому же зачем вручную каждый раз настраивать передачу фтп в браузере или в командной строке, если разработчики фтп клиентов уже давно взяли и автоматизировали процесс подключения к фтп и передачи файлов.

Надо сказать, что стандартный проводник Windows также умеет подключаться к FTP серверу, и использовать FTP соединение как будто папку с файлами на сетевом ресурсе. Это удобно с точки зрения небольшого количества файлов, которые требуется передать или получить.

Вот три лучших FTP клиента под Windows, которые доступны совершенно бесплатно.

Большинство пользователей считает, что WinSCP является лучшим бесплатным FTP клиентом для Windows. С этим стоит согласиться. Несмотря на свою простой и удобный в использовании интерфейс, WinSCP содержит ряд дополнительных функций, которые могут удовлетворить даже самые взыскательные потребности пользователей.

В дополнение к протоколу FTP WinSCP поддерживает передачу файлов и удаленное редактирование файлов с использованием протоколов SFTP, SCP и WebDAV. Независимо от того каким из вышеперечисленных протоколов Вы пользуетесь, inSCP может синхронизировать локальные каталоги с удаленными каталогами нажатием одной кнопки или комбинацией клавиш.

WinSCP интегрируется непосредственно в Windows, позволяя использовать перетаскивания файлов и включает дополнительную опции в контекстное меню Windows "Отправить". WinSCP также имеет встроенный текстовый редактор, который позволяет произвести редактирование удаленных файлов (полезно для настройки HTML, CSS, JS и т. Д.).

Для опытных пользователей WinSCP имеет интерфейс командной строки и поддержку сценариев (командные файлы и сборки.NET). Справка по использованию сценариев находится в приложение и доступна вызовом по f1 . Она отлично подходит для автоматизации задач получения и передачи файлов.

Cyberduck - простой, но эффективный FTP-клиент, который лучше всего подходит для периодической передачи файлов. Приложение может быть полезно и для опытных пользователей и для начинающих знакомство с фтп. Интерфейс Cyberduck упрощён настолько, что в нём разберётся даже ребенок. С Cyberduck тяжелые и частые передачи файлов могут быть проще при использовании более полного интерфейса.


Этот клиент является бесплатным с открытым исходным кодом. Он поддерживает несколько протоколов поверх FTP, включая SFTP и WebDAV, а также соединения с Dropbox, Google Диском, облачным хранилищем Google, Amazon S3 и другими.

Cyberduck легко интегрируется с любым внешним текстовым редактором, который удобен для удаленного редактирования веб-файлов. Он также имеет функцию быстрого просмотра, которая позволяет просматривать файлы без их загрузки. Локальные каталоги могут быть синхронизированы с удаленными каталогами.

Главной особенностью Cyberduck является возможность обеспечения безопасности передачи. Он поставляется с функцией Cryptomator, которая шифрует имена файлов и каталогов и размазывает структуры каталогов. Другими словами, даже если кто-то перехватывает Вашу передачу, они не смогут увидеть, что Вы передаете.

Единственным недостатком Cyberduck является периодически появляющаяся просьба пожертвования. Вы можете скрыть её, но она появляется снова при каждом обновлении приложения.

В 2014 году выяснилось, что поддельная версия FileZilla (версии 3.5.3 и 3.7.3) распространяются по Интернету. "Злобный близнец" FileZilla был модифицирован с целью украсть учетные данные для входа в систему FTP и сохранить их на удалённом сервере.

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

Кроме того, FileZilla уже давно подвергается критике за сохранение учетных данных для входа в систему в виде простого текста.В 2017 году с выходом версии 3.26.0 FileZilla, наконец, добавила функцию шифрования паролей, но для этого потребовалось более десяти лет жалоб пользователей.


И всё-таки, FileZilla надежный FTP-клиент.

FileZilla является бесплатным приложением с открытым исходным кодом и поддерживает передачу файлов по протоколам FTP, SFTP и FTPS. Передача файлов может быть приостановлена ​​и возобновлена, соединения поддерживают как IPv4, так и IPv6-адреса, а также может синхронизировать локальные каталоги с удаленными каталогами.

Главные функции FileZilla включают в себя сравнение каталогов, настраиваемые фильтры списков каталогов (можно создавать собственные условия фильтра), удаленный поиск файлов (с гибкими фильтрами и соответствие шаблонам), закладки для удобного доступа к часто используемым фтп каталогам.

Важное примечание по FTP и SFTP

Одним из самых больших недостатков FTP является то, что это простой текстовый протокол (File Transfer Protocol). Это означает, что данные отправляются туда и обратно в текстовом виде без труда, читаемый человеком. Это огромная уязвимость, поскольку учетные данные для входа в систему также отправляются простым текстом!

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

Вот почему Вы должны использовать SFTP вместо FTP, когда это возможно.

SFTP, который является расширением протокола SSH (Secure File Transfer Protocol), и который использует шифрование для защиты передаваемых данных (как учетных данных, так и содержимого файла).

Большинство служб, которые поддерживают FTP-соединения, также поддерживают и соединения SFTP. А при использовании FTP-клиента фактический рабочий процесс передачи файлов ничем не отличается от процесса передачи через FTP. Единственное различие заключается в том, что при подключении Вы выбираете SFTP вместо FTP.

Какой клиент FTP используете Вы? Есть ли другие хорошие фтп-клиенты, которые можете посоветовать? Или Вы предпочитаете другой протокол передачи файлов? Напишите об этом в комментариях ниже.

Каждый человек, создавший электронную почту на сервере mail.ru, может автоматически использовать мессенджер Mail.Ru Агент, точнее, его веб версию под названием «Веб Агент». Для работы с ним не требуется установка, ведь веб-версия этой простой в использовании программы с удобным интерфейсом доступна сразу при входе в почту.

Функционал

Доступны:

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

Достоинства и недостатки

При помощи онлайн-версии Агента можно отправлять бесплатные сообщения. Для этого в основном окне мессенджера нужно выбрать необходимую кнопку или же выбрать контакт из списка и отметить, что нужно сделать.

В ходе общения в чате можно отправлять собеседникам текстовые сообщения, мультимедийный контент или же увлекательные мультипликационные ролики, встроенные в мессенджер.

Веб-версия поддерживает одновременное открытие четырех диалоговых окон и общение по отдельности с четырьмя людьми. Также имеется возможность создавать и общаться в групповых чатах.

Веб-версия поддерживает большую часть возможностей, доступных через стандартный клиент. Она позволяет добавить в список контактов человека, с которым велась переписка через электронную почту. Также здесь можно отыскать человека по имени и фамилии, почтовому адресу или номеру icq.

Преимущество мессенджера mail.ru Агент в том, что разработчики успешно выпустили его на смену популярной «аське». Веб-версия приложения отлично дополняет программу, позволяя общаться с друзьями независимо от места нахождения, возможности установить программу и т.д. Все, что нужно - доступ к компьютеру с выходом в Интернет, на котором можно запустить свой почтовый ящик. После этого перед пользователем открываются многочисленные возможности для общения с друзьями и близкими.

В основной версии программы пользователю доступно множество ценных и полезных возможностей. Так, здесь можно совершать аудио или видеозвонки всем пользователям мессенджера. Для этого необходимо перейти в книгу контактов, выбрать интересующего человека и выбрать тип звонка: голосовой или видеозвонок.

При помощи программы пользователь может звонить на обычные телефонные номера. На панели управления справа находится изображение трубки телефона. Необходимо кликнуть на ней, после этого откроется окно набора номера. Если пользователь желает позвонить бесплатно, нужно набрать номер человека, пользующегося мессенджером. В противном случае потребуется оплатить услугу. Для этого необходимо через личный кабинет пополнить баланс.

Чтобы открыть Личный Кабинет, нужно открыть меню и перейти в «Настройки». Помимо возможности пополнить счет, здесь можно изменить настройки звонков, работать с тарифами и выполнять множество иных функций.

К сожалению, возможности совершать голосовые или видеозвонки недоступны в веб-версии мессенджера mail.ru Агент. Эта версия программы реализована для обмена пользователями текстовыми сообщениями и может быть использована в тех случаях, когда возможность установить полноценный клиент и пользоваться им отсутствует. Это может быть чужой компьютер или устройство с устаревшей версией ОС.

Системные требования

  • ОС: Windows 7, 8, 10

Как установить Mail.Ru Агент

Для использования онлайн-версии mail.ru Агента нет необходимости в установке десктопной версии приложения на компьютер. Программа работает через любой современный браузер, обновленный до последней версии - , и многие другие. Достаточно ввести логин и пароль в почте Mail.ru, выполнить вход в свой почтовый ящик и запустить Агент, кликнув на панель в правом нижнем углу.

Для других систем

Привет, Хабр! Меня зовут Юрий Буянов, я разработчик мессенджера TamTam. Сегодня я хочу рассказать вам немного о том, как он создавался и как устроен изнутри. TamTam - это новый мессенджер Mail.Ru Group, который был разработан на базе приложения «ОК Сообщения». В 2016 году мы сделали отдельный мессенджер в Одноклассниках для тех, кто часто переписывается в соцсети и кому удобнее это делать с помощью отдельного приложения.


Эксперимент получился удачным, поэтому в начале года мы решили развивать «ОК Сообщения» как отдельный от соцсети мессенджер под собственным брендом TamTam, но уже с набранной стартовой аудиторией. Уже за первые недели после запуска в TamTam появились десятки тысяч каналов, а аудитория продолжила общаться так же активно, как и в «ОК Сообщениях». Это стало возможным в том числе благодаря быстрой работе приложения и нескольким техническим фишкам. О них я расскажу подробнее.

Сложности, которые натолкнули на идеи

Начнём со сложностей: именно они принесли нам идеи, которые потом реализовались в продукте и в итоге превратились в преимущества приложения. Речь прежде всего о быстрой и стабильной работе мессенджера.


Стартовая аудитория TamTam - из самых разных уголков мира, в том числе с нерегулярным покрытием мобильной сети (а иногда и с полным отсутствием стационарного интернета). В некоторых странах СНГ за пределами крупных городов 2G-соединение - вообще фактически единственное окно в интернет.


Важно было и то, что далеко не все потенциальные пользователи TamTam каждый год бегут покупать новый айфон или ГОРЯЧУЮ НОВИНКУ от Samsung. По статистике, самый популярный девайс под iOS у наших пользователей - iPhone 5s, а под Android - недорогие Galaxy выпуска 2014-2015 годов. При этом у TamTam достаточно молодая аудитория: 28 % дневной аудитории - это люди в возрасте 27-34 лет, а более половины пользователей (54 %) - младше 35 лет.


Поэтому одним из приоритетных направлений в разработке мессенджера для нас с самого начала была оптимизация приложения с точки зрения как быстродействия , так и работы с сетью . Словом, требовалось незаметно для пользователей сделать так, чтобы приложение работало при любом уровне подключения. И при любом росте аудитории тоже. TamTam в первые же месяцы показывает неплохие цифры: число установок уже приближается к 3 миллионам, а число каналов уже больше 50 000.

Как мы делали приложение быстрым

Быстродействие с точки зрения пользователя - это в первую очередь скорость запуска. Время, которое проходит до отображения нового контента (например, при открытии чата с новым сообщением по push-уведомлению). Плавность работы в целом - в частности скролла. В iOS-команде мы стараемся тестировать и замерять быстродействие на iPhone 5 и iPhone 4S. Андроид-команда имеет в распоряжении Galaxy S3 и Мегафон логин за 1000 рублей. Как следствие, на более мощных девайсах приложение просто летает.


В каждой тестовой сборке можно включить счётчик кадров в секунду, а в логи и в систему статистики записывается длительность выполнения операций в узких местах.



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


Несмотря на обилие инструментов и метрик, главным инструментом оценки быстродействия приложения остаются субъективные ощущения. Никто не может точно ответить, какая задержка в миллисекундах допустима при открытии экрана сообщения, но практически каждый может сказать, есть ли у него ощущение того, что приложение «тупит».


Как мы оптимизируем? В первую очередь выносим всё, что можно, из главного потока: работу с БД (об этом чуть ниже), работу с сетью, сериализацию и десериализацию данных, процессинг картинок и даже вычисления, связанные с вёрсткой текста.


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


При выборе сторонних решений и библиотек в узких местах мы тоже старались учитывать быстродействие и компактность. В частности, именно поэтому мы выбрали MessagePack (причём для iOS специально делали бенчмарк разных реализаций), поменяли библиотеку для маппинга данных в объекты с Mantle на YYModel и остановились на lz4 в качестве алгоритма компрессии трафика.


Кроме того, для достижения плавности работы интерфейса мы симптоматически оптимизируем рендеринг:

  • избегаем offscreen-рендеринга, нагружающего процессор;
  • заранее в фоне ресайзим картинки вместо использования работающих в главном потоке стандартных UIViewContentMode;
  • делаем наши иерархии UI более «плоскими» и простыми;
  • кешируем те объекты и данные, создание которых слишком затратно. Начиная с высоты ячеек с текстом и заканчивая YYTextLayout (объект, который хранит информацию об отображении текста в библиотеке YYText), NSAttributedStrings и даже самими UIViews.

Во всех списках идёт ручная вёрстка без auto layout. Хотя auto layout мы тоже очень любим и используем декларативную вёрстку с помощью Masonry в коде - но только там, где это целесообразно.

Офлайн и работа при плохом интернете

При работе с сетью мы стараемся минимизировать трафик и задержки за счёт выбора быстрого компактного протокола и агрессивного кеширования.


В качестве способа общения с сервером мы используем только TCP-сокеты и бинарный протокол. Это позволяет нам как получать обновления с сервера в реальном времени, так и работать в более привычном режиме «запрос - ответ».


Сам API, т. е. набор команд поверх низкоуровневого протокола, можно в будущем при желании реализовать поверх другого транспорта, например на веб-сокетах. При всём этом нам не придётся трогать верхнеуровневую логику работы приложения.



Сами пакеты состоят из заголовка фиксированной длины со служебной информацией: код команды, версия протокола, длина пэйлоада. Ответы на запросы могут приходить в разном порядке и вперемешку с командами сервера, поэтому в заголовке есть sequence number, позволяющий связать запрос и ответ.


В качестве формата для пэйлоада мы решили попробовать messagepack. Он не требует жёсткого задания схемы, очень компактный и имеет довольно шустрые библиотеки сериализации под множество платформ. По сути, это эффективный бинарный аналог JSON. Для того чтобы ещё более снизить потребление трафика, мы сжимаем пэйлоад алгоритмом lz4. Его мы также выбрали за скорость и небольшую нагрузку на CPU и батарейку.


Один из главных способов обеспечить нормальную работу приложения в условиях плохой сети - максимальная поддержка офлайн-режима . Приложение должно кешировать максимум данных, тратить меньше времени и трафика на синхронизацию и уметь откладывать отправку команд до появления соединения. Причём соединение может вернуться даже при следующем запуске приложения, т. е. все отложенные задачи по отправке надо уметь сохранять в БД.


После коннекта клиент аутентифицируется, одновременно запрашивая критически важные данные: настройки, список контактов и чатов с последними сообщениями. Мы храним таймстемп последнего обновления (в серверной системе отсчета времени) и передаём его в запросе, чтобы получить обратно только то, что действительно поменялось. После того как соединение установлено, мы можем получать обновления в реальном времени: например новые сообщения или изменения данных контактов.


С историей сообщений в чате всё чуть сложнее. Грузить заранее всю историю всех чатов бессмысленно, но что мы один раз получили - то мы кешируем и стараемся больше не запрашивать. Если посмотреть на то, какие участки истории чата закешированы, мы увидим, что в истории есть «разрывы». Например, с обновлением списка чатов после логина мы увидели, что последнее сообщение в чате изменилось. При этом у нас в БД есть участок (или несколько участков) истории чата, закешированный в ходе предыдущей сессии. Кроме того, мы не знаем, сколько сообщений есть на сервере между последним сообщением в чате и предыдущим закешированным сообщением, и это добавляет своих сложностей.


Поэтому, кроме самих сообщений, мы храним метаданные о непрерывных кусках истории - чанках, которые мы закешировали. При скролле чата мы используем эту информацию: она помогает нам определить, грузить следующую страницу из БД или отправлять запрос на сервер. А может быть, делать и то, и другое. При получении новых участков истории с сервера эти чанки меняют размер и сливаются друг с другом (в случае если клиент понимает, что только что полученный участок истории соединяет два разрозненных чанка, имеющихся в БД).


Поскольку многие операции можно выполнять в офлайне, мы разработали механизм сохранения задач. Он умеет запускать задачи, дожидаться их выполнения, сохранять их состояние в БД или загружать и запускать при старте приложения.


Задачи могут сохраняться в БД, они инкапсулируют в себя всю логику выполнения. Поскольку зависимости от других задач и от состояния приложения могут быть довольно сложными, то слежение за ними тоже реализовано в самих задачах. Например, задача отправки сообщения с фотографией должна убедиться в том, что фотография обработана, загружена на CDN (за это отвечают отдельные задачи), дождаться (при необходимости) сетевого подключения и только потом непосредственно попытаться отправить само сообщение.

Два приёма для плавной работы приложения

Немного расскажу о паре приёмов, которые мы использовали для обхода ограничений системы, мешающих нам сделать дружелюбный и плавный интерфейс. На примере iOS-приложения.


Одной из сложностей при разработке стал бесконечный скролл в чате, т. е. незаметная для пользователя подгрузка истории сообщений при прокрутке чата вверх. В 99 % случаев пользователь находится именно внизу чата и хочет проскроллить его вверх для того, чтобы прочитать старые сообщения. Здесь мы столкнулись с двумя проблемами.


Во-первых, постоянное натыкание на верхнюю границу списка сообщений и ожидание подгрузки каждые несколько экранов раздражает. Эту проблему было не очень сложно решить: мы не дожидаемся, пока пользователь доскроллит до самого верха и увидит там «крутилку», а стараемся заранее запрашивать предыдущие страницы истории еще во время скролла: как из локального кеша, так и с сервера. При наличии сообщений в кеше или на быстром соединении пользователь просто не успеет доскроллить до самого верха к тому моменту, как мы сможем отобразить новую пачку сообщений.


Вторая проблема оказалась гораздо серьезнее: после вставки такой страницы в начало списка сообщений (сделанного на основе UITableView) contentOffset для уже загруженного участка сдвигается, и скролл «прыгает». Конечно, мы можем посчитать размер вставляемой страницы и изменить contentOffset обратно, но это приводит к резкой остановке анимации скролла, что некрасиво и обескураживает пользователя. Мы пытались делать это различными способами, включая такие, например, как отслеживание contentSize таблицы через KVO, но неизменно терпели неудачу: UITableView просто хронически не приспособлен к тому, чтобы элементы добавлялись в начало списка.


В итоге после ряда попыток мы смогли решить эту проблему, применив своего рода «хак»: переворачиваем список вверх ногами с помощью.transform, а затем переворачиваем каждую ячейку в обратном направлении. Пользователь ничего не замечает, но теперь contentOffset отсчитывается снизу, и подгрузка старых сообщений никак на него не влияет.


У этого решения есть ряд подводных камней, но их мы тоже сумели обойти, и нам они не мешают. Во-первых, необходимо конвертировать перевёрнутые индексы ячеек в индексы в вашей модели данных, и обратно. Если у вас больше одной секции, вычисления будут очень сложными, так что лучше ограничиться одной. Конечно, это не даёт нам использовать плавающие заголовки секций, которые на экране чата пригодились бы, например, для отображения разделителей по дням в истории. Но плавающие разделители в итоге оказалось не так сложно сделать вручную.


Во-вторых, в редких случаях могут возникнуть сложности с вычислением координат внутри ячеек, например при работе с жестами, но все они тоже решаемы. В-третьих, при подгрузке данных вниз проблема возвращается, но подгрузка при скролле вниз происходит очень редко, так что для нас это не очень большая сложность. В этом случае мы не делаем предварительную подгрузку при скролле, а дожидаемся, пока пользователь доскроллит до самого низа таблицы, затем показываем индикатор загрузки, обновляем таблицу и меняем contentOffset.


Вторая сложность, с которой мы столкнулись, - это анимированные и асинхронные обновления списков. Если несколько независимых обновлений происходят почти одновременно (например, подгружается страница истории вверху чата и приходит новое сообщение внизу), то данные, используемые делегатом tableView, могут измениться, даже если не закончилась анимация предыдущего обновления.


Это может привести к тому, что UITableView отрендерит неправильную ячейку или вообще упадёт: это ещё более вероятно, если вы используете предыдущий хак. Можно, конечно, обратиться к методу reloadData, синхронному в UITableView, однако это приводит к морганиям, остановке скролла и прочим раздражающим пользователя вещам.


Специально для таких случаев мы сделали отдельную очередь для последовательной обработки таких обновлений. Все изменения модели и отображение их на UI производятся внутри блоков, которые ставятся в очередь. При этом блок может залочить очередь при старте анимации или какой-то другой асинхронной операции и разлочить её при завершении. Таким образом, вся работа с таблицей идёт последовательно, а данные не меняются, пока не завершится предыдущая анимация.

Persistence

Для кеширования данных в iOS-клиенте мы используем библиотеку YapDatabase .


YapDatabase - это Key-Value хранилище поверх SQLite с очень большим набором возможностей. Мне эта библиотека кажется гораздо более простой и гибкой, чем CoreData. Здесь можно выбрать механизм сериализации объектов в базе: по умолчанию это NSCoding, а мы используем всё тот же MessagePack.


YapDatabase не требует наследования объектов от базового класса или реализации какого-то протокола, не привязывает объекты к контексту. Чтение и запись производятся с помощью синхронных или асинхронных транзакций.


А при помощи системы расширений доступны все те же возможности, что и в «настоящей» БД: произвольные SQL-запросы и индексирование нескольких полей, полнотекстовый поиск, подписка на изменения (как в NSFetchedResultsController), подключаемое шифрование, работа с CloudKit и т. д. Hello-world примеры работы с БД приводить здесь не буду, они есть в вики на github .


На мой вкус, YapDatabase повышает продуктивность и понятность кода, но некоторые мои коллеги её не очень любят. И их можно понять: после длительной работы с CoreData для перехода на YapDatabase нужно действительно несколько вывернуть мозг.


Кроме того, при асинхронной работе с базой через несколько соединений нужно хорошо понимать, как база обрабатывает параллельные запросы на чтение и запись: через одно или разные соединения . А ещё помнить, что объекты обновляются в БД целиком. Нельзя просто сохранить тот экземпляр, который вы прочитали какое-то время назад и модифицировали. Необходимо прочитать объект из базы, изменить его так, как вам нужно, и записать обратно в рамках одной транзакции. В противном случае можно случайно записать в БД устаревшие данные.


Вообще работа с базой очень удобно встраивается в наш реактивный стиль написания кода. Асинхронные шаблоны транзакций (чтение/запись/модификация отдельного объекта) очень просто завернуть, например, в сигналы ReactiveCocoa, и встраивать работу с базой в одну цепочку с отправкой и обработкой сетевых запросов.

Архитектура приложения

Много рассказывать про архитектуру не буду, но совсем не упомянуть о её законах жанра, как говорится, не позволяют. Докладов и статей про MVVM уже очень много (например, классический туториал в версии для Objective-C b RAC: часть 1 , часть 2 , или о реализации этого паттерна для Swift).


Под слоем ViewModels есть набор сервисов, который реализует (и по возможности инкапсулирует) бизнес-логику, логику работы с протоколом и кеширование. Навигация в приложении осуществляется с помощью так называемого роутера, т. е. объекта, инкапсулирующего код, необходимый для открытия того или иного экрана. На самом деле роутеров в процессе стало несколько, поскольку у роутера есть тенденция становиться эдаким очень жирным God Object. Поэтому там, где это возможно, мы стараемся его декомпозировать. Например, за весь процесс регистрации/аутентификации пользователя отвечает отдельный роутер.


По опыту предыдущих проектов мы знали, что Dependency Injection очень упрощает структуру приложения и здорово облегчает изменения в архитектуре. В самом начале мы использовали для DI фреймворк Typhoon , но в ходе оптимизации времени запуска приложения выяснили, что разрешение зависимостей занимает непозволительно долгое время на старте приложения (единицы секунд на слабых устройствах). Поэтому мы перешли на ручной DI через property-based injection. Не сказал бы, что кода стало больше: уровень сервисов в приложении обычно настраивается в одном классе, а вся конфигурация сервисов легко читается. Для share и imessage экстеншенов, естественно, сервисы конфигурируются отдельно, поскольку в этом случае нужен гораздо меньший их набор.


Таким образом, связанность кода была изначально не очень большой, и даже через довольно продолжительное время после начала разработки мы без особого труда смогли вынести часть сервисов и обслуживающего кода в отдельную библиотеку (точнее, даже набор библиотек), которая реализует бо́льшую часть внутренней логики мессенджера, включая работу с протоколом и кеширование, и которую можно встраивать в другие приложения.

Добавить метки