1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ldcsaa-HP-Socket

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Описание

Сервер основан на модели коммуникации IOCP/EPOLL в сочетании с технологией пула памяти, приватной кучи и т. д. Эффективное управление памятью реализовано для поддержки крупномасштабных и высококонкурентных сценариев коммуникации.

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

Клиент основан на коммуникационной модели Event-Select/POLL, каждый компонентный объект создаёт поток связи и управляет соединением через сокет. Компоненты клиента подходят для небольших клиентских сценариев.

Документация

  • Руководство по разработке HP-Socket.
  • Диаграмма классов HP-Socket (UML).
  • Диаграмма классов HP-Socket (JPG).
  • Диаграмма классов SSL HP-Socket (JPG).
  • Диаграмма HTTP-классов HP-Socket (JPG).

Рабочий процесс

  1. Создать объект слушателя.
  2. Создать компонентный объект (и связать его с объектом слушателя).
  3. Запустить компонентный объект.
  4. Подключиться к хосту назначения (только для компонента «Агент»).
  5. Обрабатывать сетевые события (OnConnect/OnReceive/OnClose и т.д.).
  6. Остановить компонентный объект (необязательно: компонентный объект будет остановлен перед уничтожением на шаге 7).
  7. Уничтожить компонентный объект.
  8. Уничтожить объект слушателя.

Пример на C++

#include <hpsocket/HPSocket.h>

/* Listener Class */
class CListenerImpl : public CTcpPullServerListener
{

public:
    // 5. process network events
    virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);
    virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient);
    virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);
    virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength);
    virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
    virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);
    virtual EnHandleResult OnShutdown(ITcpServer* pSender);
};

int main(int argc, char* const argv[])
{
    // 1. Create listener object
    CListenerImpl s_listener;
    // 2. Create component object (and binding with listener object)
    CTcpPullServerPtr s_pserver(&s_listener);

    // 3. Start component object
    if(!s_pserver->Start("0.0.0.0", 5555))
        exit(1);

    /* wait for exit */
    // ... ...

    // 6. (optional) Stop component object
    s_pserver->Stop();

    return 0;

    // 7. Destroy component object automatically
    // 8. Destroy listener object automatically
}

Пример на языке C

#include <hpsocket/HPSocket4C.h>

// 5. process network events
EnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);
EnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);
EnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);
EnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
EnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);

int main(int argc, char* const argv[])
{
    HP_TcpPullAgentListener s_listener;
    HP_TcpPullAgent s_agent;

    // 1. Create listener object
    s_listener = ::Create_HP_TcpPullAgentListener();
    // 2. Create component object (and binding with listener object)
    s_agent    = ::Create_HP_TcpPullAgent(s_listener);

    /* Set listener callbacks */
    ::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect);
    ::HP_Set_FN_Agent_OnSend(s_listener, OnSend);
    ::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive); ```
::HP_Set_FN_Agent_OnClose(s_listener, OnClose);
    ::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown);

    // 3. Запустить объект компонента
    if(!::HP_Agent_Start(s_agent, "0.0.0.0", TRUE))
        exit(1);

    // 4. Соединиться с целевым хостом
    ::HP_Agent_Connect(s_agent, REMOTE_HOST_1, REMOTE_PORT_1, nullptr);
    ::HP_Agent_Connect(s_agent, REMOTE_HOST_2, REMOTE_PORT_2, nullptr);
    ::HP_Agent_Connect(s_agent, REMOTE_HOST_3, REMOTE_PORT_3, nullptr);

    /* ждать завершения */
    // ... ...

    // 6. (необязательно) Остановить объект компонента
    ::HP_Agent_Stop(s_agent);

    // 7. Уничтожить объект компонента
    ::Destroy_HP_TcpPullAgent(s_agent);
    // 8. Уничтожить объект слушателя
    ::Destroy_HP_TcpPullAgentListener(s_listener);

    return 0;
}

Список компонентов

  • Основные компоненты

![Основной компонент](Doc/Основной%20компонент%20-%20mini.jpg «Основной компонент»)

  • Компоненты SSL

![Компонент SSL](Doc/Компонент%20SSL%20-%20mini.jpg «Компонент SSL»)

  • HTTP-компоненты

![HTTP-компонент](Doc/HTTP%20компонент%20-%20mini.jpg «HTTP-компонент»)

Проекты для справки

Расширяющие проекты

Группы технического обмена

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

HP-Socket — это универсальная высокопроизводительная коммуникационная структура для TCP/UDP/HTTP, включающая в себя серверные, клиентские компоненты и компонент Agent. Она широко используется в различных сценариях применения систем TCP/UDP/HTTP и предоставляет интерфейсы для таких языков программирования, как C/C++, C#, Delphi, Euphoria, Java и ... Развернуть Свернуть
Apache-2.0
Отмена

Обновления (16)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/ldcsaa-HP-Socket.git
git@api.gitlife.ru:oschina-mirror/ldcsaa-HP-Socket.git
oschina-mirror
ldcsaa-HP-Socket
ldcsaa-HP-Socket
dev