Сообщение Библиотека для создания сетевых приложений (асинхронная + мн от 12.11.2015 7:57
Изменено 12.11.2015 8:00 Николай Ивлев
Здравствуйте, abrec, Вы писали:
A>Привет!
A>Зачем ОНО????
Быстро написать сервер. Из примера:
1) Наследуем наш сервер от базового класса
2) Переопределяем функцию createClient, где мы вернем нашего клиента отнаследанного от базового класса.
Каждый раз когда пришло подключение — вызывается это функция
3) Пишем клиента. Надо отнаследовать от класса doronix::Client и переопределить 2 метода — readFromClient, writeToClient
Когда мы читаем и приходят данные — вызывается readFromClient, а когда мы перевели клиента в пишущий режим вызвав setWriting,
вызывается writeToClient чтобы послать данные клиенту.
Начальный стейт (читает или пишем) вы выставляем в сервере. Меняет методами setReading/setWriting. Возможно поставить чтение
на паузу вызвал suspendWriting/resumeWriting.
В папке examples есть 2 примера — http сервер и чат. Библиотека асинхронная, многопоточная с поддержкой SSL, и возможностью асинхронно/синхронно файл.
Все очень быстро.
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) Наследуем наш сервер от базового класса
2) Переопределяем функцию createClient, где мы вернем нашего клиента отнаследанного от базового класса.
Каждый раз когда пришло подключение — вызывается эта функция
3) Пишем клиента. Надо отнаследовать наш клиент от класса doronix::Client и переопределить 2 метода — readFromClient, writeToClient
Когда мы читаем и приходят данные — вызывается readFromClient, а когда мы перевели клиента в пишущий режим вызвав setWriting,
вызывается writeToClient чтобы послать данные клиенту.
Начальный стейт (читаем или пишем) вы выставляем в сервере. Меняем методами setReading/setWriting. Возможно поставить чтение
на паузу вызвав suspendWriting/resumeWriting.
В папке examples есть 2 примера — http сервер и чат. Библиотека асинхронная, многопоточная с поддержкой SSL, и возможностью асинхронно/синхронно послать файл.
Все очень быстро.
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;
};