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

OSCHINA-MIRROR/ldcsaa-HP-Socket

Клонировать/Скачать
README_zh.md 6.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 10:33 2b6f060

Высокопроизводительная кроссплатформенная сетевая коммуникационная структура

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

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

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

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

  • Руководство по разработке 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. Start component object
    if (!::HP_Agent_Start(s_agent, "0.0.0.0", TRUE))
        exit(1);

    // 4. Connect to dest host
    ::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);

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

    // 6. (optional) Stop component object
    ::HP_Agent_Stop(s_agent);

    // 7. Destroy component object
    ::Destroy_HP_TcpPullAgent(s_agent);
    // 8. Destroy listener object
    ::Destroy_HP_TcpPullAgentListener(s_listener);

    return 0;
}

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

Базовый компонент

Basic Component

SSL-компонент

SSL Component

HTTP-компонент

HTTP Component

Проекты для цитирования

Расширенные проекты

Техническое общение

Опубликовать ( 0 )

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

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