HPSocket4Python — это привязка HPSocket к Python, которая стремится сделать использование компонентов HPSocket на Python более удобным. В настоящее время Tcp_Push_Server можно использовать, наследуя класс.
Установка:
Код выглядит следующим образом:
# 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 )