Skip to content
Filipp Ozinov edited this page Aug 10, 2013 · 28 revisions

Архитектура

  1. Сервер, на основе пула потоков.

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

  1. nginx - будет отдавать файлы + фронтенд

  2. Скриншотилка - будет закачивать файлы

  3. thumnail-daemon - демон, делающий preview для загружаемых файлов

У всех файлов - уникальное n-значное имя + корректное расширение. По расширению определяется тип файла и срабатывает подсветка синтаксиса / превью для картинок.

Протокол отправки файла клиентом на сервер:

Клиент отправляет:

proto=pastexen
version=1.0
type=jpg
uuid=e9c7ed9875121c4f4e736b6126bd9a5326bd9a5326bd9a53
size=142034

binary_data

Где jpg - тип файла; 142034 - размер файла в байтах; binary_data - содержимое файла; fuid - 24х байтный хеш, уникальный для каждого клиента (unique universal identifier).

После получения файла сервер отвечает:

proto=pastexen
version=1.0
url=http://host.tst/file1.jpg

url - прямая сылка на файл или на страницу с оформленным текстом с подсветкой синтаксиса

База данных

В качестве бд используется redis. Структура следующая.

GET records_count - количество загруженных файлов (инкрементируется при добавлении файла)
GET file_path_%path% - id (только число, без префикса) файла с системным именем %path%
HGET file_%id% type - тип файла (image / text)
HGET file_%id% name - имя файла (может задаваться пользователем)
HGET file_%id% extension - расширение файла (может меняться пользователем)
HGET file_%id% path - путь к файлу на диске на сервере
HGET file_%id% timestamp - время загрузки файла
HGET file_%id% description - описание файла (может задаваться пользователем)
HGET file_%id% uuid - uuid клиента, загрузившего файл
ZRANGE uuid_e9c7ed9875121c4f4e736b6126bd9a5326bd9a5326bd9a53 0 -1 - сортированный по timestamp список файлов пользователя с таким хешем

GET users_count - количество зарегистрированных пользователей (инкрементируется при добавлении пользователя)
GET user_login_%login% - uid пользователя с логином %login%
GET user_uuid_%uuid% - uid (число) пользователя клиента с определенным uuid
HGET user_%uid% login - логин пользователя c номером %uid%
HGET user_%uid% password - соленый md5 хеш пароля пользователя c номером %uid%
ZRANGE user_%uid%_uuids 0 -1 - сортированный по timestamp список uuid клиентов пользователя

Веб часть

  • Конфигурационный файл: /web/app/config.php
  • sources_dir = путь к директории с присылаемыми исходниками
  • language_default = язык, используемый при возникновении проблем с автоопределением
  • download_link_windows = ссылка для загрузки Windows-сборки клиента
  • download_link_other = ссылка для загрузки остальных сборок клиента
  • download_link_source = ссылка для загрузки исходного кода клиента
  • Каталог с языковыми файлами: /web/app/languages/
  • Каталог со статичными файлами: /web/app/static/
  • Каталог с "шаблонами": /web/app/views/
  • Каталог с логикой страниц: /web/app/actions/
  • Каталог с моделями: /web/app/models/

Картинка, которая примерно показывает, что происходит при запросе определенных страниц: http://pastexen.com/i/3xjM6Mf.png

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

Устаревшее ТЗ

  1. Главная страничка сервиса. 1 абзац текста - описание. Возможно несколько скриншотов приложения. Крупная ссылка на скачивание. Чуть менее крупная ссылка на исходники. Поискать похожие сайты скриншотилок, выделить как то наши преимущества (pastebin, разные хоткеи, опенсорсность). HTML + Css, мб js

  2. Страничка со ссылками на скачивания различных версий под различные ос. HTML + Css, мб js

  3. Страничка с превью скриншотом. Придумать, как будет выглядеть. HTML + Css + PHP, мб js. Один скрипт: imageview.php. Принимает в качестве параметра уникальное имя картинки: http://наш_сайт/imageview.php?ah3kjd8ikam.png Должен открыть изображение, которое лежит в папке /images/ под именем ah3kjd8ikam.png и красиво его показать.

  4. Страничка с исходным кодом с подсветкой синтаксиса. Посмотреть pastebin, github, сделать подобным образом. HTML + Css + PHP, мб js, мб что-то готовое, что умеет подсвечивать синтаксис. Один скрипт: codeview.php Принимает в качестве параметра уникальное имя файла с исходным текстом: http://наш_сайт/codeview.php?a7jdk8epsN.cpp Должен открыть файл с исходником, который лежит в папке /sources/ под именем a7jdk8epsN.cpp и красиво его показать (с подсветкой синтаксиса).