каждый.
Вопрос 1
Я пытаюсь использовать Rsocket. Как сервер Rsocket отправляет сообщение клиенту? Как и websocket, сервер может отправлять сообщения одному клиенту или всем клиентам. Я не могу найти способ сделать это. Может быть, я могу использовать канал? Но я не знаю, что делать.
Вопрос 2
Я использую канал так:
@MessageMapping("channel")
fun channel(settings: Flux<Duration>) =
settings
.doOnNext { setting: Duration -> println("Frequency setting is ${setting.seconds} second(s).") }
.switchMap { setting: Duration ->
Flux.interval(setting).map { index: Long -> Message("Server", "Channel", index) }
}
.log()
А в js я делаю это:
const {
RSocketClient
} = require('rsocket-core');
const RSocketTcpClient = require('rsocket-tcp-client').default;
const {Flowable} = require('rsocket-flowable')
const tcpClient = new RSocketTcpClient((host, port))
const client = new RSocketClient({
setup: {
keepAlive,
lifetime,
dataMimeType: "application/json",
metadataMimeType: 'message/x.rsocket.routing.v0'
},
transport: tcpClient,
});
const flowablePayload = new Flowable(subscriber => {
subscriber.onSubscribe({
cancel: () => {},
request: n => {
for (let index = 0; index < n; index++) {
const message = {
message: "requestChannel from JavaScript! #" + index
};
subscriber.onNext(message);
}
subscriber.onComplete();
}
});
});
client.connect().subscribe({
onComplete: socket => {
console.log('onComplete')
socket.requestChannel({
data: flowablePayload,
metadata: String.fromCharCode('channel'.length) + 'channel'
}).subscribe({
onComplete: res => console.log(res),
onError: err => console.error(err),
onSubscribe: cancel => console.log('success')
});
},
onError: error => {
console.log("got error");
console.error(error);
},
onSubscribe: cancel => {
console.log("subscribe!");
}
})
вывод:
subscribe!
onComplete
success
Но я не могу получить информацию о канале MessageMapping
, а метод channel
не выполняется.
Что мне делать?
Спасибо !!!