代码之家  ›  专栏  ›  技术社区  ›  Silk0vsky

如何在SpringCloudGateway上记录websocket消息?

  •  0
  • Silk0vsky  · 技术社区  · 6 年前

    我在聊天服务前面运行云网关服务,它处理websocket连接。 我们是否有一些方便的方法来记录网关端socket客户端和聊天服务之间发生的交互?

    我注意到云网关使用了一些 org.springframework.cloud.gateway.filter.WebsocketRoutingFilter 代理websockets,但不确定如何加入它的团队&如果合适的话

    0 回复  |  直到 6 年前
        1
  •  0
  •   Silk0vsky    6 年前

    目前,我还没有找到一种方法来将自己的拦截器与框架提供的工具连接起来。所以我决定复制粘贴的WebsocketRoutingFilter实现,使用@Primary annotation&注入自己的逻辑。

    原件 WebsocketRoutingFilter 创建的实例 ProxyWebSocketHandler 在内部处理套接字会话,并且有一个方法 handle 这是可以增加的。

    也要小心 DataBuffer 代表每一条信息。它控制已经读取的数据量。所以我决定这样读信息:

    private String readBufferedMessage(DataBuffer dataBuffer) {
        DataBuffer slice = dataBuffer.slice(0, dataBuffer.capacity());
        byte[] bytes = new byte[slice.readableByteCount()];
        slice.read(bytes);
        return new String(bytes, StandardCharsets.UTF_8);
    }
    
    推荐文章