http servers

Описание: Наиболее перспективное направление развития компьютерных наук. Надо быть в теме!

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#1 dyvniy » Пт, 24 апреля 2015, 10:38:19

Proxygen on facebook
https://code.facebook.com/posts/1503205539947302/ ... n-facebook-s-c-http-framework/
Не ставит своей целью заменить апач или энгинкс - высокопроизводительных веб-серверов общего назначения, написанных на С.
Предпочитая узкоспециализированную роль.

https://github.com/facebook/proxygen
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#2 dyvniy » Пт, 24 апреля 2015, 11:18:03

Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#3 dyvniy » Пт, 24 апреля 2015, 12:39:02

Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#4 dyvniy » Вт, 12 мая 2015, 11:17:13

Boost::asio
http://forum.sources.ru/index.php?showtopic=382490

Код: Выделить всё

#include <boost/asio.hpp>
 
#include <thread>
 
 
using boost
::asio::ip::tcp;
 
const char data
[]="HTTP/1.0 200 OK\r\n"
      "Content-Length: 67\r\n"
      "Content-Type: text/html\r\n"
      "\r\n"
      "<html><body>The quick brown fox jumps over the lazy dog<br/><body/>";
 
 
void session
(tcp::socket sock)
{
 
  sock
.send(boost::asio::buffer(data, sizeof(data));
 }
 
int main
(int argc, char *argv[])
{
  boost::asio::io_service io_service;
  tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), 80));
 
  for 
(;;)
  {
    tcp::socket sock(io_service);
    a.accept(sock);
    std::thread(session, std::move(sock)).detach();
  }
 
 
  return 0
;
}
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#5 dyvniy » Вт, 12 мая 2015, 14:25:13

Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#6 dyvniy » Ср, 10 июня 2015, 18:36:36

Снова про Boost:asio
http://alexott.net/ru/cpp/BoostAsioNotes.html
Спойлер
Что такое Boost.Asio и зачем он нуженRussian · English
ГлавнаяИнформационная безопасностьФункциональное программированиеLispClojureSchemeErlangC++Open Source ProjectsEmacsСтатьи


Проблема написания на С++ кросс-платформенного кода для работы с сетью существует достаточно давно, и для решения этой проблемы было создано некоторое количество библиотек. Но Boost.Asio можно назвать лучшей реализацией среди существующих. На базе Boost.Asio уже построено несколько библиотек (libpion, cpp-netlib), и кроме того, ведется разработка новых. Кроме того, на базе Boost.Asio я спроектировал и разработал подсистему фильтрации для системы фильтрации веб-трафика СКВТ "Дозор-Джет".

К основным возможностям Boost.Asio можно отнести следующие:

возможность написания кросс-платформенного сетевого кода, работающего на большом количестве платформ - Windows, практически все Unix-подобные ОС, Tru64
поддержка как IPv4, так и IPv6
работа с TCP & UDP
поддержка выполнения асинхронных операций
возможность использования интерфейсов, совместимых с std::iostream
поддержка SSL
поддержка отложенных операций (таймеры)
Для меня, самым главным преимуществом Boost.Asio (не считая высокой переносимости кода) является то, что на каждой платформе реализуется наиболее эффективная стратегия работы (epoll на Linux 2.6, kqueue на FreeBSD/MacOSX, Overlapped IO на MS Windows), и то, что библиотека позволяет использовать разные стратегии — синхронная и асинхронная работа с сокетами, использование потокового ввода-вывода, совместимого с std::iostream. И эти стратегии можно смешивать, например, принимать соединения используя асинхронную обработку событий, а затем, запускать нить, которая будет использовать синхронный ввод-вывод данных (пример test-otpc.cpp).

Для демонстрации возможностей Boost.Asio я написал (частично адаптировав примеры из поставки) несколько примеров, реализующих разные стратегии обработки данных (большее количество примеров, можно найти на домашней странице Boost.Asio). Я использовал эти примеры для оценки применимости разных стратегий в своих разработках. Все эти примеры реализуют "тупой" веб-сервер — он принимает запрос, и отдает одну и ту же страницу, независимо от указанного URL. Сейчас выложены следующие примеры (все исходные тексты включают в себя файл common.h):

test-mcmt.cpp — реализует обработку данных в соответствии со стратегией Many Connections/Many Threads: запускается несколько нитей выполнения, которые по очереди принимают соединение и обрабатывают запросы в асинхронном режиме;
test-otpc.cpp — реализует обработку данных в соответствии со стратегией One Thread per Connection: одна нить выполнения асинхронно принимает соединения (файлы test-otpc-conn.cpp & test-otpc-conn.hpp), а затем запускает новую нить, в пределах которой используется синхронный ввод-вывод;
test-otpc-tp.cpp — аналогично test-otpc.cpp, но новая нить не создается каждый раз, а используется пул нитей, реализуемый библиотекой threadpool.
Для сборки примеров (исходники лежат на github) нужен boost версии 1.35 или выше.

Я думаю, что на основе данной заметки может получится написать более подробную статью, но это задел на будущее, а пока можно задавать мне вопросы :-)

Last change: 05.03.2013 16:54
Изображение


Название раздела: Web на стороне клиента, Java Script
Описание: Наиболее перспективное направление развития компьютерных наук. Надо быть в теме!

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения
:) ;) :hihi: :P :hah: :haha: :angel: :( :st: :_( :cool: 8-| :beee: :ham: :rrr: :grr: :* :secret: :stupid: :music: Ещё смайлики…
   

Вернуться в «Web на стороне клиента, Java Script»

Кто сейчас на форуме (по активности за 15 минут)

Сейчас этот раздел просматривают: 4 гостя