如何将 RSocket 数据检索到不同的选项卡?
How to retrieve RSocket Data to different tabs?
这是我的代码,它仅适用于我所在的选项卡。我收到回复,一切似乎都很好,我仍然不了解整个技术的运作,这就是我去找你的原因。
它以“responseHanlder”结尾
connect() {
// backend ws endpoint
const wsURL = "ws://localhost:6565/rsocket";
// rsocket client
const client = new RSocketClient({
serializers: {
data: JsonSerializer,
metadata: IdentitySerializer,
},
setup: {
keepAlive: 60000,
lifetime: 180000,
dataMimeType: "application/json",
metadataMimeType: "message/x.rsocket.routing.v0",
},
transport: new RSocketWebSocketClient({
url: wsURL,
}),
});
client.connect()
.then((sock) => {
document.getElementById("connect")
.addEventListener("click", (event) => {
numberRequester(sock);
});
}, errorHanlder);
/*Aquí comienza el código del primer socket para insertar un producto
antes de enviar la notificación primero realiza una acción*/
const numberRequester = (socket) => {
socket
.requestResponse({
data: {
id: null,
subscriber: retrieveData.id,
titulo: "Se insertó un nuevo producto",
descripcion:
"Aquí se agrega una descripcion breve de lo que se acaba de hacer (opcional)",
fecha_inicio: today,
fecha_final: final,
leido: false,
},
metadata:
String.fromCharCode("insert.notification".length) +
"insert.notification",
})
.subscribe({
onComplete: responseHanlder,
onError: errorHanlder,
onNext: responseHanlder,
onSubscribe: (subscription) => {
//subscription.request(100); // set it to some max value
},
});
}
// error handler
const errorHanlder = (e) => console.log(e);
// response handler
const responseHanlder = (payload) => {
this.sendNotification(payload.data);
};
}
发送数据后,我的 rsocket 收到信息,然后我收到包含我需要的数据的响应。目前,它仅在运行它的选项卡中有效,但我需要在其他选项卡中反映该信息,因为它是通知的原型。
RSocket 是有状态的、面向会话的、应用程序协议
这意味着,每次您的 RSocket 客户端连接到服务器时,它都会打开一个连接并通过它与您的服务器通信。
如果客户端是浏览器,出于安全原因,其他浏览器会话将无法访问您的连接。
如何通过rsocket广播消息
实际上,对于浏览器,您可以使用 2 个选项:
经纪人类型的消息传递
您始终可以连接到单个中介服务器,这将确保您的消息被广播到所有目的地。
您可以在 Spring Tutorials
找到这样的应用示例
使用 WebRTC 传输的 Broker less 消息传递(实验性且未正式发布)
我们有几个关于将 WebRTC(连同普通的 WebSocket)传输到浏览器通信的实验。
请找到那些实验here。请尝试并在我们的问题跟踪器上分享您的 feedback/vote 以获得此传输支持,如果您认为需要的话。
这是我的代码,它仅适用于我所在的选项卡。我收到回复,一切似乎都很好,我仍然不了解整个技术的运作,这就是我去找你的原因。
它以“responseHanlder”结尾
connect() {
// backend ws endpoint
const wsURL = "ws://localhost:6565/rsocket";
// rsocket client
const client = new RSocketClient({
serializers: {
data: JsonSerializer,
metadata: IdentitySerializer,
},
setup: {
keepAlive: 60000,
lifetime: 180000,
dataMimeType: "application/json",
metadataMimeType: "message/x.rsocket.routing.v0",
},
transport: new RSocketWebSocketClient({
url: wsURL,
}),
});
client.connect()
.then((sock) => {
document.getElementById("connect")
.addEventListener("click", (event) => {
numberRequester(sock);
});
}, errorHanlder);
/*Aquí comienza el código del primer socket para insertar un producto
antes de enviar la notificación primero realiza una acción*/
const numberRequester = (socket) => {
socket
.requestResponse({
data: {
id: null,
subscriber: retrieveData.id,
titulo: "Se insertó un nuevo producto",
descripcion:
"Aquí se agrega una descripcion breve de lo que se acaba de hacer (opcional)",
fecha_inicio: today,
fecha_final: final,
leido: false,
},
metadata:
String.fromCharCode("insert.notification".length) +
"insert.notification",
})
.subscribe({
onComplete: responseHanlder,
onError: errorHanlder,
onNext: responseHanlder,
onSubscribe: (subscription) => {
//subscription.request(100); // set it to some max value
},
});
}
// error handler
const errorHanlder = (e) => console.log(e);
// response handler
const responseHanlder = (payload) => {
this.sendNotification(payload.data);
};
}
发送数据后,我的 rsocket 收到信息,然后我收到包含我需要的数据的响应。目前,它仅在运行它的选项卡中有效,但我需要在其他选项卡中反映该信息,因为它是通知的原型。
RSocket 是有状态的、面向会话的、应用程序协议
这意味着,每次您的 RSocket 客户端连接到服务器时,它都会打开一个连接并通过它与您的服务器通信。
如果客户端是浏览器,出于安全原因,其他浏览器会话将无法访问您的连接。
如何通过rsocket广播消息
实际上,对于浏览器,您可以使用 2 个选项:
经纪人类型的消息传递
您始终可以连接到单个中介服务器,这将确保您的消息被广播到所有目的地。
您可以在 Spring Tutorials
找到这样的应用示例使用 WebRTC 传输的 Broker less 消息传递(实验性且未正式发布)
我们有几个关于将 WebRTC(连同普通的 WebSocket)传输到浏览器通信的实验。
请找到那些实验here。请尝试并在我们的问题跟踪器上分享您的 feedback/vote 以获得此传输支持,如果您认为需要的话。