当前位置: 首页 > 知识库问答 >
问题:

Rsocket服务器如何向客户端发送消息?以及如何在JS中使用Channel?

松秦斩
2023-03-14

所有人。

我使用的频道是这样的:

  @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

谢谢!!!

共有1个答案

冉俊德
2023-03-14

问题1:如果您想知道如何向某个客户机发送消息,请参阅此StackOverflow问题使用websockets with Rsocket和Spring Webflux仅向某个客户机发送消息

问题2:我从来没有尝试过使用频道,但我不确定你是否真的需要它。例如,我会在一个在线游戏中使用该通道,其中用户不断地按下按键,服务器必须对它们做出响应。

 类似资料:
  • 问题内容: 我将实现类似于Facebook通知和此网站的内容(StackOverflow的通知会通知我们是否有人为我们的问题写评论/答案等)。请注意,用户将使用我的应用程序作为网站而不是移动应用程序。 我遇到以下获取结果的答案,但我需要推送结果而不是获取结果。 根据建议,我在实体类中创建了一个简单方法,并向其中添加了@PostPersist,但此方法不起作用,因此基于此答案,我添加了persist

  • 问题内容: 我正在尝试创建一个可以从服务器向客户端发送消息的python应用程序。目前,我正在从这里使用此示例代码。这是一个聊天应用程序,并且运行良好。我试图修改该应用程序,并在服务器端python代码中添加了一个新功能,该功能将在客户端打印一条消息“ Dummy”,但似乎不起作用。 这是我的html代码: index.html 这是我的后端代码: web_app.py main.py 我可以在终

  • 我有一个客户端和一个服务器。当客户端连接到服务器时,服务器向客户端发送消息。如果用户点击“新消息”按钮,我希望服务器向客户端发送一条新消息。我怎样才能做到这一点? 我的代码(我已经删除了所有 try-Catch) 客户: 处理人: 服务器:

  • 问题内容: 我是golang和websocket的新手。 我正在尝试编写一个websocket服务器,一旦握手完成,该服务器可以将消息主动发送到客户端。 但是我的服务器只会在收到来自客户端的请求后才将消息发送给客户端。 有谁知道如何实现此功能,或者在哪里可以找到相关的答案? 非常感谢。 源代码如下: 问题答案: 尝试打包websocket。 这是Godoc的一个简单示例:

  • 问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下

  • 当我提交表单时,我在浏览器控制台中看到“emit”消息,所以我知道表单提交事件正在触发,但我没有在服务器上收到测试消息。客户端或服务器端似乎什么也没发生,“socket.emit”函数似乎什么也没做。 我做错了什么?