私の目標は、クライアントをサーバー イベント SSE にサブスクライブすることです。クライアントは WebSocket プロトコルを使用するため、以下を使用します。spring.rsocket.server.transport: websocket
ブロック IO スタックのアナログ:
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfiguration: WebSocketMessageBrokerConfigurer {
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
registry.enableSimpleBroker("/topic")
registry.setApplicationDestinationPrefixes("/app")
}
override fun registerStompEndpoints(registry: StompEndpointRegistry) {
registry.addEndpoint("/websocket")
.setAllowedOrigins("*")
.withSockJS();
}
}
使用法:
@Service
class MessagingService(private val simpMessagingTemplate: SimpMessagingTemplate) {
private val logger = KotlinLogging.logger {}
fun notify(baseEvent: BaseEvent) {
logger.debug { "Sending an event $baseEvent" }
simpMessagingTemplate.convertAndSend("/topic/events", baseEvent)
}
}
クライアントコード:
function connect() {
var socket = new SockJS('/websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/events', function (event) {
console.log('Handled message from ws: ' + event)
showGreeting(JSON.parse(event.body));
});
});
}
simpMessagingTemplateが接続されたクライアントにイベントをプッシュする場所。
私はリアクターで同じことを達成したいと思ってspring-boot-starter-rsocket
います。これはクライアントサーバーレベルでも WebSocket で動作します。
Rsocketrequest-stream
は適合しますが、この場合、イベントがいつ発生するかわからないため、サーバー上にエターナル フラックス ストリームが必要です。やり方がわからない