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

OSCHINA-MIRROR/slientes-websocket-channel

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

Лёгкий фреймворк WebSocket-Channel как альтернатива традиционным API

Данный проект основан на Spring Boot и отказывается от существующих ограничений API-интерфейсов, полностью используя настроенную связь через WebSocket. Проект подходит для интерактивных бизнес-процессов в реальном времени, таких как онлайн-игры. Фреймворк обеспечивает лёгкую обёртку для этих процессов.

Традиционная архитектура Spring MVC

Введите здесь описание изображения

Архитектура WebSocket-Channel

Введите здесь описание изображения

Проект основан на Kotlin 1.3.61 и JDK 8.

Как использовать

// В Maven импортируйте:
<dependency>
    <groupId>com.jiayou</groupId>
    <artifactId>websocket-channel-spring-boot-starter</artifactId>
    <version>1.0-Beta</version>
</dependency>
  • Конфигурация YML. Эта конфигурация сканирует ваши реальные бизнес-классы, которые аннотированы @SocketBusiness.
socket:
  packages: com.jiayou   # Сканируйте пакеты бизнес-классов

Все бизнес-классы должны быть внедрены в контейнер IOC и аннотированы с помощью @SocketBusiness на уровне класса. Методы должны быть аннотированы с помощью @SocketWork.

@SocketBusiness аналогичен @RequestMapping на уровне класса.

@SocketWork аналогичен @RequestMapping на уровне метода.

Пример:

data class User(var id: Int, var name: String)

@Component
@SocketBusiness("人员")          //@RequstMapping('/人员')
class SelectService {

    @SocketWork("查询")          //@RequstMapping('/查询')
    fun select(parameterData: ParameterData): User {
        println(parameterData)
        return User(1, "websocket-channel")
    }

    @SocketWork("插入")          //@RequstMapping('/插入')
    fun insert(parameterData: ParameterData) {
        println("插入数据成功!")
    }
}

Соответственно, это будет выглядеть так:

Spring MVC:

http://localhost:8080/人员/查询

http://localhost:8080/人员/插入

WebSocket-Channel: Поскольку это общение через сокет, мы используем данные в формате JSON для взаимодействия. После упаковки это выглядит следующим образом:

{
  "id": "8ec52519-6d69-491e-be34-64b7c89f0826",        // UUID, сгенерированный на стороне клиента, используется сервером для сопоставления результатов с UUID
  "from": "userID",                                    // Идентификатор пользователя, который может быть настроен пользователем
  "intent": "人员-查询",                                // Это путь к бизнес-операции, которую мы сопоставили
  "parameterType": "Json",                             // В настоящее время можно передавать только данные JSON, которые будут обновлены позже
  "data": 2                                            // Переданные параметры
}

SpringBoot прослушивает: Webscoket-Channel должен сканировать компоненты IOC, аннотированные @SocketBusiness, и настраивать их следующим образом:

@SpringBootApplication
class DemoApplication : ApplicationListener<ContextRefreshedEvent> {

    @Bean
    fun serverEndpointExporter() = ServerEndpointExporter()

    @Autowired
    private lateinit var webSocketAutoConfig: WebSocketAutoConfig

    override fun onApplicationEvent(event: ContextRefreshedEvent) {
        event.applicationContext.getBeanNamesForAnnotation(SocketBusiness::class.java).forEach {
            webSocketAutoConfig.scan(event.applicationContext.getBean(it).javaClass)
        }
        WebSocketEndpoint.configurableApplicationContext = event.applicationContext as WebApplicationContext
        println(WebSocketAutoConfig.endpointMap)
    }

}

Конфигурация конечной точки WebSocket: Конечная точка должна наследовать класс WebSocketEndpoint и внедряться в контейнер IoC, а также аннотировать с помощью @ServerEndpoint("/xx/xx/{id}").

@Component
@ServerEndpoint("/server/{id}")
class Socket : WebSocketEndpoint()

Проверка

Если конфигурация верна, вы увидите следующую строку в журнале консоли:

com.jiayou.WebSocketEndpoint: Инициализирован глобальный веб-сокет Endpoint. И информация о вашем бизнес-классе:

{人员={class com.example.demo.SelectService=[{插入=insert}, {查询=select}]}} После успешной проверки без ошибок выполните следующие шаги:

Используйте онлайн-инструмент для подключения к WebSocket-Channel: ws://localhost:8080/server/123 После успешного подключения отправьте следующий JSON:

{
  "id": "8ec52519-6d69-491e-be34-64b7c89f0826",
  "from": "123",
  "intent": "人员-查询",
  "parameterType": "Json",
  "data": "2"
}

Сервер вернёт вам информацию о взаимодействии.

Обратная связь и обсуждение:

Изображение

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

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

Введение

Описание недоступно Развернуть Свернуть
MulanPSL-1.0
Отмена

Обновления

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

Участники

все

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

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