Демонстрация эффекта:
[введите описание изображения]
allprojects { repositories { maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' } } }
2. В файле entry модуля build.gradle:
```gradle
dependencies {
implementation('com.gitee.chinasoft_ohos:StompProtocolOhos:1.0.1')
......
}
В версии SDK6 и DevEco Studio 2.2 Beta1 проект можно запустить напрямую. Если запуск не удаётся, удалите файлы проекта .gradle, .idea, build, gradle, build.gradle и создайте новый проект на основе вашей версии. Скопируйте соответствующие файлы нового проекта в корневой каталог.
WebSocketConfig.groovy
@Configuration
@EnableWebSocket
@EnableWebSocketMessageBroker
class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
void configureMessageBroker(MessageBrokerRegistry config) {
long[] heartbeat = [ 30000, 30000 ];
config.enableSimpleBroker("/topic", "/queue", "/exchange")
.setTaskScheduler(new DefaultManagedTaskScheduler()) // enable heartbeats
.setHeartbeatValue(heartbeat); // enable heartbeats
// config.enableStompBrokerRelay("/topic", "/queue", "/exchange"); // Uncomment for external message broker (ActiveMQ, RabbitMQ)
config.setApplicationDestinationPrefixes("/topic", "/queue"); // prefix in client queries
config.setUserDestinationPrefix("/user");
}
@Override
void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/example-endpoint").setAllowedOrigins("*").withSockJS()
}
@Override
void configureWebSocketTransport(WebSocketTransportRegistration registration) {
registration.setMessageSizeLimit(8 * 1024);
}
}
SocketController.groovy
@Slf4j
@RestController
class SocketController {
@Autowired
SocketService socketService
@MessageMapping('/hello-msg-mapping')
@SendTo('/topic/greetings')
EchoModel echoMessageMapping(String message) {
log.debug("React to hello-msg-mapping")
return new EchoModel(message.trim())
}
@RequestMapping(value = '/hello-convert-and-send', method = RequestMethod.POST)
void echoConvertAndSend(@RequestParam('msg') String message) {
socketService.echoMessage(message)
}
}
Базовый пример
private StompClient mStompClient;
// ...
mStompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, "ws://" + OhOS_EMULATOR_LOCALHOST + ":" + RestClient.SERVER_PORT + "/example-endpoint/websocket");
mStompClient.connect();
mStompClient.topic("/topic/greetings")
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(topicMessage -> {
debug("Received " + topicMessage.getPayload());
addItem(mGson.fromJson(topicMessage.getPayload(), EchoModel.class));
}, throwable -> {
debug("Error on subscribe topic" + throwable);
});
// ...
mStompClient.disconnect();
. Подписка на жизненный цикл соединения:
lifecycleDisposable = connectionProvider.lifecycle()
.subscribe(lifecycleEvent -> {
switch (lifecycleEvent.getType()) {
case OPENED:
HiLog.error(LABEL, "Socket opened");
break;
case CLOSED:
HiLog.error(LABEL, "Socket closed");
disconnect();
break;
Примечание: в тексте запроса присутствуют фрагменты кода, которые не удалось перевести из-за их специфичности. Также в запросе есть ссылки на сторонние ресурсы, которые не были переведены.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )