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

OSCHINA-MIRROR/MeTime-syuio

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

Что такое prototransl

Prototransl — это сокращение от «protocol translate», что в переводе с английского означает «преобразование протокола». Prototransl представляет собой инструмент для обработки сообщений через сокеты, который обеспечивает упаковку и распаковку данных, а также обеспечивает безопасность. Он может автоматически сопоставлять данные с логической обработкой через аннотации. Инструмент подходит для работы с WebSocket, TCP и UDP.

В контексте передачи сообщений каждый тип сообщения называется протоколом. Поскольку существуют протоколы, необходимо выполнять их распаковку и упаковку, что не имеет смысла для разработчиков. Prototransl решает эту проблему, автоматически выполняя распаковку и упаковку данных на основе определённого пользователем протокола.

Поскольку сообщения могут быть перехвачены и расшифрованы злоумышленниками, prototransl выполняет индивидуальную упаковку каждого поля сообщения, обеспечивая безопасность передачи данных, если только код приложения не является открытым.

Пример использования

Приведён пример разработки TCP-сервера на основе Apache Mina и prototransl. Также упоминается версия prototransl для JavaScript.


Предисловие

  1. Prototransl разработан на Java 8.
  2. Порядок байтов при распаковке и упаковке данных — Big Endian (большой порядок байтов).
  3. Максимальный размер одного сообщения по умолчанию составляет 30 КБ.
  4. Встроенное пространство буфера составляет 128 КБ.
  5. Prototransl находится на стадии тестирования.

Некоторые параметры конфигурации по умолчанию можно настроить в файле prototransl.properties.

Сообщения протокола

Обработка сообщений через сокет включает распаковку и упаковку сообщений протокола (Protocol). Логическая обработка определяется автоматически на основе информации из заголовка сообщения (ProtocolService). Инструмент поддерживает следующие типы данных: Uint8, Uint16, Uint32 и Uint64, а также строки, целые числа, короткие целые числа, длинные целые числа и логические значения в Java.

Контейнеры

Инструмент предоставляет встроенные контейнеры, которые позволяют выполнять операции через интерфейс Cr. Доступ к контейнеру можно получить через метод transl.getIoc. По умолчанию используется одноэлементный режим.

Аннотации

@Protocol

Эта аннотация указывает, что класс является классом протокола, где mType — уникальный идентификатор протокола. Пример использования:

@Protocol(mType = 1)
public class User {
    private String name;
    private Uint32 phone;
    //опущены геттеры и сеттеры
}

Или во внутреннем классе:

public class User {
    @Protocol(mType = 1)
    public static class User2{
        private Uint8 ret;
    }
}

@ProtocolService

Указывает, что класс содержит логику обработки. Пример:

@com.prototransl.annotation.ProtocolService
public class ProtocolService {
    //методы логической обработки
}

@Itinerary

Определяет конкретный метод логической обработки, соответствующий протоколу mType, и принимает параметр типа Protocol. Пример:

@com.prototransl.annotation.ProtocolService
public class ProtocolService {
    @Itinerary(mType=1)
    public void proto1(User user){
        System.out.println(user.getName());
        System.out.println(user.getPhone());

    }
}

Буфер

Встроенный буфер ProtoBuffer основан на ByteBuffer в Java. Каждое полученное сообщение должно быть добавлено в буфер. Если вы работаете с сервером, рекомендуется использовать отдельный буфер для каждого пользователя.

Быстрый старт

Для начала работы с prototransl необходимо выполнить следующие шаги:

  1. Добавить репозиторий проекта в Maven:

    <repositories>
        <repository>
            <id>lamkeizyi-repo</id>
            <url>https://raw.githubusercontent.com/AlexJialene/maven-repo/master/repository</url>
        </repository>
    </repositories>
  2. Загрузить необходимые пакеты:

    <dependency>
        <groupId>prototransl</groupId>
        <artifactId>com.prototransl</artifactId>
        <version>1.0-beta-3</version>
    </dependency>
  3. Настроить файл prototransl.properties:

    prototransl.basePackage=com.prototransl //сохранить параметр
    prototransl.protocol.servicePackage=com.model //пакет класса логической обработки
    prototransl.protocol.protocolPackage=com.model //пакет класса протокола
    prototransl.scan.recursively=true //сканировать ли пакеты рекурсивно
    prototransl.pack.capacity=1024 //максимальная ёмкость при упаковке
    prototransl.buffer.littleEndian=false //порядок байтов при записи в буфер (по умолчанию false)
    prototransl.port=9876 //сохранить параметр
  4. Запустить приложение:

    Transl transl = Transl.transl();
    transl.initialize();
  5. Принять сообщение:

    Transl transl = Transl.transl();
    byte[] b = ...;
    ProtoBuffer protoBuffer = new ProtoBuffer();
    protoBuffer.addBuff(b);
    //обработать полученное сообщение, после успешной проверки на соответствие протоколу автоматически вызывается метод логической обработки
    transl.createProtocolApp().receive(protoBuffer);
  6. Упаковать данные:

    Transl transl = Transl.transl();
    //передать объект протокола для получения массива байтов
    byte[] b = transl.createProtocolApp().pack(user);

Продвинутое использование

Здесь описывается расширенное использование prototransl, включая использование классов Uint.

Классы Uint представляют собой серию классов, которые могут заменить стандартные типы Java, такие как Integer, Short, Long и Boolean. Рекомендуется использовать классы Uint вместо стандартных типов Java для повышения эффективности, особенно при распаковке сообщений.

Поддерживаются следующие типы Java и соответствующие им классы Uint:

Тип Java Класс Uint
Integer Uint32
Short Uint16
Long Uint64
Boolean Uint8
String

Uint8 занимает 1 байт, Uint16 — 2 байта, Uint32 — 4 байта, а Uint64 — 8 байтов. Вы можете выбрать подходящий класс Uint в зависимости от ваших потребностей.

Пример использования:

@Protocol(mType = 1)
public class User {
    private String name;
    private Uint32 phone;
    private Uint8 sex;
    private Uint16 field1;
    private Uint64 field2;
    //геттеры и сеттеры опущены
}

Также доступны интерфейсы PackProtocol и UnpackProtocol, которые предоставляют дополнительную гибкость и контроль над процессом упаковки и распаковки данных. Однако использование этих интерфейсов требует дополнительной логики и может повлиять на порядок полей в сообщении. ``` // Игнорируем метод конструирования @Override public boolean unpackProto(Unpack proto) { this.ret = proto.popUint8(); this.phone = proto.popUint32(); return true; } }


2. Pack

@Protocol(mType = 2) public class User2 implements PackProtocol{ private Uint8 ret; private Uint32 phone; // Игнорируем метод конструирования @Override public void packProto(Pack proto) { proto.push(ret); proto.push(phone); } }


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

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

Введение

ProtoTrans — это инструмент для работы с сообщениями через сокеты, который обеспечивает их упаковку и распаковку для обеспечения безопасности. Он позволяет автоматически сопоставлять сообщения с логической обработкой через аннотации. Подходит для работы с WebSocket, TCP и UDP сообщениями. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

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

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