跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • netty 可以实现长连接的 http 双向通信吗?
未分類
11 4 月 2020

netty 可以实现长连接的 http 双向通信吗?

netty 可以实现长连接的 http 双向通信吗?

資深大佬 : yazinnnn 27

大概的业务场景是这样: 服务队开启 tcp 长连接服务,客户机发送心跳保持长连接

客户机的相关业务协议都是 http(长连接时也是),所以需要服务端能接受 http 请求和 http 响应并正确解码,还要能发送 http 请求,不过不需要关心返回 http 响应

现在卡在 socket 管道内处理接收到的数据时只能处理一种,比如添加了 HttpRequestDecoder 的解码器之后就无法解码客户机返回的 response 响应了…

请问有啥方便的解决办法吗?

现在能想到的就是自己实现一个先 request 解码 判断一下 失败的话就扔给 response 解码,不知道开销是不是比较大

大佬有話說 (16)

  • 資深大佬 : xuxueli

    netty http/tcp 均支持双向通讯,可以参考这个实现: https://github.com/xuxueli/xxl-rpc

  • 資深大佬 : BBCCBB

    你是说 websocket 吧

  • 主 資深大佬 : yazinnnn

    @xuxueli
    是 tcp 的长连接保持双向通信,但是通信协议是 http 协议,请问大佬有解决思路吗

  • 資深大佬 : tairan2006

    HTTP 就是短链接啊…你怎么长连接的,HTTP2/3 么

  • 資深大佬 : angryfish

    如果客户端是标准 http1 的话,没啥办法。只能收到心跳的时候,把数据返回给客户端。不可能主动向客户端发送数据的。魔改版的 http 客户端,另说!

  • 資深大佬 : araaaa

    不懂,为什么服务端需要接受响应

  • 資深大佬 : Malthael

    **现在卡在 socket 管道内处理接收到的数据时只能处理一种,比如添加了 HttpRequestDecoder 的解码器之后就无法解码客户机返回的 response 响应了…**

    这句什么意思,协议既要解析 tcp 的心跳又要解析 http ?

  • 主 資深大佬 : yazinnnn

    @Malthael
    是这样,客户机是第三方的,长短链接都是用的 http 协议发送接收消息,因为服务端要主动下发一些东西,客户机也会主动上报一些报文,所以希望服务端都能解析出来

    比如,虽然是 tcp 心跳,但是客户机是包装成 http 请求发送过来的

    @araaaa
    不是接受响应,两方保持 tcp 长连接时,通信的协议是 http,所以需要 request response 都能解析

  • 資深大佬 : zhaishunqi

    @BBCCBB
    纯看标题我也觉得说的是 websocket…

  • 資深大佬 : Ariver

    lz 你的网络基础需要加强啊

  • 資深大佬 : yuankui

    https://github.com/zhoumengkang/netty-websocket
    没试过,不知道这个行不行?

  • 主 資深大佬 : yazinnnn

    @zhaishunqi
    客户机是第三方的,不支持 ws….

    客户机发送的 tcp 心跳报文是这样的
    “`
    DefaultHttpRequest(decodeResult: success, version: HTTP/1.1)
    POST /*******/HeartReportInfo HTTP/1.1
    Content-Type: application/json
    Content-Length: 166
    “`

    自主上报的业务报文是这样的
    “`
    DefaultHttpRequest(decodeResult: success, version: HTTP/1.1)
    POST /******/Verification HTTP/1.1
    Content-Length: 328196
    Content-Type: text/plain
    Connection: close
    …

    客户机能接收的业务报文也是类似的 http 请求
    “`

    @Ariver
    愿闻其详

  • 主 資深大佬 : yazinnnn

    @yuankui
    这个不行,三方的客户机不支持 ws…

  • 資深大佬 : VictorFan

    http1.1 默认就是长连接的,其实说长连接应该是指 TCP 层。证好最近在研究网管协议 tr069,能实现 http 双向通信功能,可以借鉴一下它的机制。

  • 主 資深大佬 : yazinnnn

    暂时妥协了,先控制客户机的报文长度(就是删掉上报图片),先解码成 string 实现业务再说…..

    发现了 HttpObjectDecoder 这个类,不过是抽象类,netty 的几个子类都直接区分了 request 和 response,还有一个流传输协议

    不知道有没有办法实现一个能区分出 req 和 resp 的 HttpObjectDecoder 子类来…抽空研究一下

  • 資深大佬 : xcstream

    http 的话搜 comet 关键词可以找到答案

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具