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