我是Rsocket和反应性Websocket的新手,我开发了一个应用程序,在那里我需要多个通道,我的客户可以在那里订阅。直到现在,我尝试了2种解决方案,但不幸的是,它们都不像我所期望的那样起作用。
我有一个具有@MessageMapping的控制器
@MessageMapping("my-channel")
public Flux<String> channel(final Flux<String> message) {
log.info("Received stream-stream (channel) request... ");
return message
.doOnNext(m -> log.info("Request: ", m))
.doOnCancel(() -> log.warn("Client cancelled the channel"))
.switchMap(setting -> Flux.interval(Duration.ofSeconds(10)).map(index -> "Love spring if it works"))
.log()
;
}当我试图连接到rsc客户端时,一切都很好。
./rsc --debug --channel --data=asd --route=my-channel --stacktrace ws://localhost:7000但不幸的是,当我试图从我的反应本地客户端连接时,目标路由总是'‘。当然,如果我更改@MessageMapping(“me”) -> @MessageMapping(""),它会完美地工作,但是对于明显的目的,这个解决方案不适合我。
const connector = new RSocketConnector({
setup: {
keepAlive: 100,
lifetime: 10000,
metadataMimeType: "application/json",
dataMimeType: "message/x.rsocket.routing.v0"
},
transport: new WebsocketClientTransport({
url: "ws://192.168.0.107:7000",
wsCreator: (url) => new WebSocket(url) as any,
}),
});
const rsocket = await connector.connect();
await new Promise((resolve, reject) => {
const requester = rsocket.requestChannel(
{
data: undefined,
metadata: Buffer.concat([
Buffer.from(String.fromCharCode('my-channel'.length)),
Buffer.from('my-channel'),
]),
},
1,
false,
{
onError: (e) => reject(e),
onNext: (payload, isComplete) => {
console.log(
`payload[data: ${payload.data}; metadata: ${payload.metadata}]|${isComplete}`
);
requester.request(1);
if (isComplete) {
resolve(payload);
}
},
onComplete: () => {
resolve(null);
},
onExtension: () => { },
request: (n) => {
console.log(`request(${n})`);
requester.onNext(
{
data: Buffer.from("Message"),
},
true
);
},
cancel: () => { },
}
);
}).catch(e => {
console.log("-------------ERRORRRRRR-------------")
console.error(e);
});错误消息如下:
-------------ERRORRRRRR-------------
ERROR [Error: Destination '' does not support REQUEST_CHANNEL. Supported interaction(s): [METADATA_PUSH, SETUP]]我做错了什么?
最后一个问题是如何在建立连接时发送额外的标题?
谢谢你提前提供帮助。
发布于 2022-10-13 21:25:55
借助OlegDokuka在这个讨论中的帮助,我可以管理这个问题。唯一的问题就像他提到的那样。
实际:
metadataMimeType: "application/json",
dataMimeType: "message/x.rsocket.routing.v0"必须是
dataMimeType: "application/json",
metadataMimeType: "message/x.rsocket.routing.v0"https://stackoverflow.com/questions/74046533
复制相似问题