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

插座的Reactor通量代理。IO客户端Java

曹智
2023-03-14

我正在实现Spring WebFluxendpoint,它应该从套接字获取数据。IO客户端Java。

我不明白如何将传入数据收集到Flux流中。我可以创建新的Flux并订阅该传入数据吗?感谢您的建议。

@GetMapping("/streaming", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<MyRecourse> getStreaming() {

    URI uri = URI.create("http://localhost/socket.io"); // client
    Socket socket = IO.socket(uri);

    socket.on("event", args -> {    
        JSONObject obj = (JSONObject)args[0]; 
        MyRecourse recource = MyRecourse.create(obj);

        // how to put this recource into Flux stream?
    });

    return fluxStreamOfRecources;

}

共有1个答案

唐彦
2023-03-14

你可以使用焊剂。create()从事件侦听器生成通量。

Flux.<MyResource>create(emitter -> {

     URI uri = URI.create("http://localhost/socket.io"); // client
     Socket socket = IO.socket(uri);

     socket.on("event", args -> {    
       JSONObject obj = (JSONObject)args[0]; 
       MyResource resource = MyResource.create(obj);
       emitter.next(resource);
     });

     // subscribe on error events
     socket.on(Socket.EVENT_CONNECT_ERROR, args -> {    
       // get error
       emitter.error(throwable);
     });

     // unsubscribe from events when the client cancels
     emitter.onDispose(() -> {
         // disconnect from socket
         // socket.off(...)
     });
 });
 类似资料:
  • 我正在使用套接字开发一个简单的聊天应用程序。它是客户机-服务器驱动的。除了这个我找不到的bug,一切都很完美:如果我是第一个连接到服务器的客户机,我收到的每一条消息都会在屏幕上打印一次(就像它应该的那样)。然而,如果我是第二个连接的客户,我收到的每条消息都会打印两次,第三个客户会看到他的消息三次,以此类推 当我通过插座收到东西时,我像这样打印它: 因此,如果我收到用户“charles”发送的消息h

  • 有人有任何示例代码来演示在java客户端接收消息socket.io? 还有,有没有从同一个套接字发送文件/二进制文件/图片的例子。io java客户端?(基本上是来自java而非javascript客户端的示例代码) android java client的版本可以在这里获得(该版本声称它可以与socket.io 1.0及更高版本一起使用)(似乎是最新的版本)https://github.com/

  • 我正在尝试基于Apache示例和FTPSClient类,使用Apache Commons网络库开发Java FTPS客户端。要运行de代码,我使用Java8,更新45。 当我调用“retrieveFile”方法时,会发生异常。我不确定,但我相信用于传输文件的连接没有使用上面指定的HTTP代理。 使用FileZilla客户端,我可以使用相同的配置传输文件。 我如何解决这个问题? 我的代码: 输出:

  • 我试图了解Socketchannes和NIO的总体情况。我知道如何使用常规套接字,以及如何为每个客户机服务器创建一个简单的线程(使用常规阻塞套接字)。 所以我的问题是: 什么是袜子通道 当我使用SocketChannel而不是Socket时,额外得到了什么 通道和缓冲区之间的关系是什么 什么是选择器 文档中的第一句话是

  • 假设我在MongoDB中有以下模式: 每个帖子必须有一个所有者,并且可能有许多贡献者(由所有者添加)。 当所有者或任何贡献者对post对象进行更改时,我需要将该更改实时通知给所有相关的用户(使用Socket。IO)。 但是我对如何做到这一点有一些疑问...我的意思是,我知道 Socket.IO 有一些方法可以向特定用户发出消息,但我们需要知道 SocketID。如何将用户 ID 与套接字 ID 相

  • 我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面