Информация об изменениях

Сообщение Библиотека для создания сетевых приложений (асинхронная + мн от 12.11.2015 7:57

Изменено 12.11.2015 8:00 Николай Ивлев

Здравствуйте, abrec, Вы писали:

A>Привет!

A>Зачем ОНО????

Быстро написать сервер. Из примера:

1) Наследуем наш сервер от базового класса

class HttpServer: public doronix::TcpServer
{
public:
      HttpServer(const std::string &documentRoot, bool useAsyncFiles, int bufferSize, int threadCount = 0);
      doronix::Client *createClient(doronix::TcpSocket *socket) override;
private:
      std::string _documentRoot;
      bool _useAsyncFiles;
};


2) Переопределяем функцию createClient, где мы вернем нашего клиента отнаследанного от базового класса.
Каждый раз когда пришло подключение — вызывается это функция

#include "httpserver.h"
#include "httpclient.h"

HttpServer::HttpServer(const std::string &documentRoot, bool useAsyncFiles, int bufferSize, int threadCount)
      : doronix::TcpServer(doronix::READING_FROM_STATE, bufferSize, threadCount)
      , _documentRoot(documentRoot)
      , _useAsyncFiles(useAsyncFiles)
{
}

doronix::Client *HttpServer::createClient(doronix::TcpSocket *socket)
{
      HttpClient *client = new HttpClient();

      client->setDocumentRoot(_documentRoot);
      client->setUseAsyncFiles(_useAsyncFiles);

      return client;

}


3) Пишем клиента. Надо отнаследовать от класса doronix::Client и переопределить 2 метода — readFromClient, writeToClient
Когда мы читаем и приходят данные — вызывается readFromClient, а когда мы перевели клиента в пишущий режим вызвав setWriting,
вызывается writeToClient чтобы послать данные клиенту.

Начальный стейт (читает или пишем) вы выставляем в сервере. Меняет методами setReading/setWriting. Возможно поставить чтение
на паузу вызвал suspendWriting/resumeWriting.

В папке examples есть 2 примера — http сервер и чат. Библиотека асинхронная, многопоточная с поддержкой SSL, и возможностью асинхронно/синхронно файл.
Все очень быстро.

class HttpClient: public doronix::Client
{
public:
      HttpClient();
      ~HttpClient();

      int readFromClient(const char *buffer, int size) override;
      int writeToClient(char *buffer, int size) override;
 
      void setDocumentRoot(const std::string &documentRoot);
      void setUseAsyncFiles(bool useAsyncFiles);

private:
      bool _headerSent = false;

      doronix::File *_file = 0;
      std::string _buffer;

      std::string _documentRoot;
      bool _useAsyncFiles = true;
};
Библиотека для создания сетевых приложений (асинхронная + мн
Здравствуйте, abrec, Вы писали:

A>Привет!

A>Зачем ОНО????

Быстро написать сервер. Из примера:

1) Наследуем наш сервер от базового класса

class HttpServer: public doronix::TcpServer
{
public:
      HttpServer(const std::string &documentRoot, bool useAsyncFiles, int bufferSize, int threadCount = 0);
      doronix::Client *createClient(doronix::TcpSocket *socket) override;
private:
      std::string _documentRoot;
      bool _useAsyncFiles;
};


2) Переопределяем функцию createClient, где мы вернем нашего клиента отнаследанного от базового класса.
Каждый раз когда пришло подключение — вызывается эта функция

#include "httpserver.h"
#include "httpclient.h"

HttpServer::HttpServer(const std::string &documentRoot, bool useAsyncFiles, int bufferSize, int threadCount)
      : doronix::TcpServer(doronix::READING_FROM_STATE, bufferSize, threadCount)
      , _documentRoot(documentRoot)
      , _useAsyncFiles(useAsyncFiles)
{
}

doronix::Client *HttpServer::createClient(doronix::TcpSocket *socket)
{
      HttpClient *client = new HttpClient();

      client->setDocumentRoot(_documentRoot);
      client->setUseAsyncFiles(_useAsyncFiles);

      return client;

}


3) Пишем клиента. Надо отнаследовать наш клиент от класса doronix::Client и переопределить 2 метода — readFromClient, writeToClient
Когда мы читаем и приходят данные — вызывается readFromClient, а когда мы перевели клиента в пишущий режим вызвав setWriting,
вызывается writeToClient чтобы послать данные клиенту.

Начальный стейт (читаем или пишем) вы выставляем в сервере. Меняем методами setReading/setWriting. Возможно поставить чтение
на паузу вызвав suspendWriting/resumeWriting.

В папке examples есть 2 примера — http сервер и чат. Библиотека асинхронная, многопоточная с поддержкой SSL, и возможностью асинхронно/синхронно послать файл.
Все очень быстро.

class HttpClient: public doronix::Client
{
public:
      HttpClient();
      ~HttpClient();

      int readFromClient(const char *buffer, int size) override;
      int writeToClient(char *buffer, int size) override;
 
      void setDocumentRoot(const std::string &documentRoot);
      void setUseAsyncFiles(bool useAsyncFiles);

private:
      bool _headerSent = false;

      doronix::File *_file = 0;
      std::string _buffer;

      std::string _documentRoot;
      bool _useAsyncFiles = true;
};