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

OSCHINA-MIRROR/RonxBulld-HPSocket4Python

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:22 72351fc

HPSocket4Python

1. Быстрый просмотр

HPSocket4Python — это привязка HPSocket к Python, которая стремится сделать использование компонентов HPSocket на Python более удобным. В настоящее время Tcp_Push_Server можно использовать, наследуя класс.

Установка:

1. pip install HPSocket

2. clone проект локально, затем импортируйте его.

Код выглядит следующим образом:

# coding: utf-8

import time,sys,os
sys.path.append(os.getcwd())
sys.path.append(os.getcwd()+'/../')

from HPSocket import TcpPush
from HPSocket import helper
import HPSocket.pyhpsocket as HPSocket

class Server(TcpPush.HP_TcpPushServer):
    EventDescription = TcpPush.HP_TcpPushServer.EventDescription

    @EventDescription
    def OnAccept(self, Sender, ConnID, Client):
        (ip,port) = HPSocket.HP_Server_GetRemoteAddress(Sender=Sender, ConnID=ConnID)
        print('[%d, OnAccept] < %s' % (ConnID, (ip, port)))
        print('Current connected: %s' % repr(HPSocket.HP_Server_GetAllConnectionIDs(Sender)))

    @EventDescription
    def OnSend(self, Sender, ConnID, Data, Length):
        print('[%d, OnSend] > %s' % (ConnID, repr(Data)))

    @EventDescription
    def OnReceive(self, Sender, ConnID, Data, Length):
        print('[%d, OnReceive] < %s' % (ConnID, repr(Data)))
        self.Send(Sender=Sender, ConnID=ConnID, Data=Data)
        return HPSocket.EnHandleResult.HR_OK

    def OnClose(self, Sender, ConnID, Operation, ErrorCode):
        (ip, port) = HPSocket.HP_Server_GetRemoteAddress(Sender=Sender, ConnID=ConnID)
        print('[%d, OnClose] > %s opt=%d err=%d' % (ConnID, (ip, port), Operation, ErrorCode))
        return HPSocket.EnHandleResult.HR_OK


if __name__ == '__main__':
    svr = Server()
    if svr.Start(host='0.0.0.0', port=5555):
        print('server started.')
        while True:
            time.sleep(1)
    else:
        print('server fail.')
## 2. Что делает HPSocket4Python:
Чтобы разработчики Python могли лучше использовать HP-Socket, высокопроизводительный и доступный сокет-фреймворк, HPSocket4Python выполняет ненавязчивую привязку к нему. HPSocket4Python является промежуточным звеном, которое преобразует вызовы функций Python через перевод и использует HP-Socket на основе C++. Из-за различий в определениях языков Python трудно напрямую вызывать C++ API, например, Python не поддерживает передачу адресов базовых типов данных, структуры данных (классы) включают другие члены и т. д., поэтому необходимо использовать модуль ctypes для преобразования. HPSocket4Python упрощает эту серию шагов, стремясь позволить разработчикам завершить базовую структуру за 3 минуты и сосредоточиться на реализации бизнес-логики.
## 3. Как реализован HPSocket4Python:
* HPSocket/HPSocketAPI.py — через автоматически сгенерированный файл, простое инкапсулирование API и некоторые определения типов, соответствующие файлу HPSocket4C.h;
* HPSocket/HPTypeDef.py — через автоматически созданный файл, простая инкапсуляция определений типов, соответствующая файлу HPTypeDef.h;
* HPSocket/pyhpsocket.py — полуавтоматически созданный файл, инкапсуляция всей системы высокого уровня, вызов и возврат полностью используют структуры данных Python, которые можно использовать напрямую без необходимости понимания знаний ctypes;
* HPSocket/multiplatforms.py — кроссплатформенный адаптивный модуль, автоматическое определение известных платформ и загрузка соответствующих динамических библиотек;
* HPSocket/Tcp[Pack/Push/Pull].py — инкапсулированные классы модели PACK/PUSH/PULL, разработчики могут напрямую наследовать и переопределять связанные функции On_ для реализации бизнес-логики.
## 4. Как использовать HPSocket4Python:
Можно обратиться к примерам в каталоге Demo, просто нужно унаследовать класс, который вы хотите использовать, а затем реализовать соответствующие методы-члены.
Обратите внимание, что перед определением функции необходимо добавить описание функции EventDescription, иначе необходимо вручную установить возвращаемое значение HPSocket.EnHandleResult.HR_XXX, иначе может возникнуть неопределённое поведение.
В этой версии документа с описанием пока не добавлено подробное описание каждой API, планируется выпустить его в следующей версии.
## 5. Известные недостатки:
* из-за полного использования Python возможно некоторое снижение производительности;
* в настоящее время поддерживается только динамическая библиотека версии 5.1.1, совместимость с более высокими версиями ещё не проверена;
* высокая инкапсуляция не поддерживает HTTP, динамическая инкапсуляция UDP не написана DEMO;
## 6. Перенос/кроссплатформенность:
Требуется только установка Python3 на хост-системе и наличие полной стандартной библиотеки.
Пакет предоставляет часть динамической библиотеки платформы, если целевая система отсутствует, разработчику необходимо скомпилировать библиотеку HP-Socket самостоятельно.

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

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

1
https://api.gitlife.ru/oschina-mirror/RonxBulld-HPSocket4Python.git
git@api.gitlife.ru:oschina-mirror/RonxBulld-HPSocket4Python.git
oschina-mirror
RonxBulld-HPSocket4Python
RonxBulld-HPSocket4Python
master