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

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 前端与后台通过 socket 提供接口的问题
未分類
27 10 月 2020

前端与后台通过 socket 提供接口的问题

前端与后台通过 socket 提供接口的问题

資深大佬 : awanganddong 1

场景:获取表单里边的实时状态值

一般情况下是 ajax 轮询通过 http 协议获取接口实时内容

如果用 socket 来实现的话,

是不是每个接口,后台都要起一个新的端口来提供连接。

对于这点,不太清晰。

大佬有話說 (31)

  • 資深大佬 : long2ice

    可以用 websocket,传输的 json 用一个 key 区分场景。

  • 資深大佬 : xuanbg

    如果用 socket 来实现的话,粘包也许迟到,但不会缺席。

  • 主 資深大佬 : awanganddong

    明白了

    就是 switch case 判断

  • 資深大佬 : nnnToTnnn

    @xuanbg 粘包 是什么? 有一说一我用 TCP /UDP 完全没听说过粘包

  • 資深大佬 : xuanbg

    @xuanbg 然后你需要自己设计一个应用层协议来实现表单状态的实时下发。

  • 資深大佬 : azcvcza

    websocket 起一个,然后根据 on(‘message’,(data)=>{})来判断 data 的 type 再进行一系列操作

  • 資深大佬 : nnnToTnnn

    刚查了一下资料 `TCP 是流协议,根本不存在所谓粘包一说。` 我猜应该是应用层没处理好流导致的 @xuanbg #2L

  • 資深大佬 : nnnToTnnn

    TCP 的流协议,哪来的包的说法,这个名词我惊呆了

  • 資深大佬 : xuanbg

    @nnnToTnnn 是的,v2 不是经常出来粘包问题么,所以就调笑了一下。应用不通过应用层协议通信,而是直接往 socket 里怼数据,就会发现对方接受的数据粘在一起无法区分,俗称“粘包”。

  • 資深大佬 : xuanbg

    @nnnToTnnn 所以粘包不仅是一个伪问题,还是一个生造出来的伪概念。

  • 資深大佬 : wysnylc

    我说怎么看不到粘包,原来早就被我 b 了

  • 資深大佬 : libook

    服务端一个端口可以管理多个客户端的连接,但这个管理需要你自己在程序上做好,比如数据应该经由哪一条连接发给指定的客户端。

    用 WebSocket 吧,很多问题都帮你考虑好了,另外如果你用 Node.js ,Socket.io 这个库帮你把 WebSocket 封装得开箱即用。

  • 資深大佬 : reus

    Http 也可以 long pull,不用轮询

  • 資深大佬 : zsdroid

    粘包警察会迟到到不会缺席

  • 資深大佬 : shintendo

    粘包警察还有三十秒……哦已经到了啊

  • 資深大佬 : selvecui

    tcp 粘包很常见啊,应用层做好 magic 字,起始符,结束符就好了,但是哪里比得上 websocket 方便,纯 tcp 有点底层了

  • 資深大佬 : baiyi

    看起来是 watch 的场景,可以不用 websocket,直接通过 http 的持久链接来实现,也叫长链接。

    具体可以搜索 HTTP 长链接、HTTP chunk 等关键词

  • 資深大佬 : zczy

    直接用 Netty 的 websocket 的 example,代码都是现成的

  • 資深大佬 : caoyouming

    粘包是应用层在消息边界上定义有问题吧?

  • 資深大佬 : stephenxiaxy

    @xuanbg 哈哈

  • 主 資深大佬 : awanganddong

    @baiyi 项目是基于 php-fpm ,一个 http 长链接就占了一个进程,实现起来不如 socket 来的合适。

  • 主 資深大佬 : awanganddong

    一个参考资料

    https://my.oschina.net/scgywx/blog/464707

  • 資深大佬 : des

    longpoll sse websocket 都可以做到,你这种比较推荐 sse

  • 資深大佬 : CommandZi

    是不是每个接口,后台都要起一个新的端口来提供连接。
    不是

    一个 socket 链接可以任何二进制数据,为什么要新起链接?

  • 資深大佬 : ISSSSSSS

    Websocket 或者 SSE 。

  • 資深大佬 : dcoder

    @awanganddong 里各种五花八门的回答,你们是在认证帮主么?
    我认证问主个问题,现在 JS web 前端可以直接用 TCP/UDP socket 和后端通信了 ??
    我记得以前是不能的. 如果不能,这个问题本身就不成立. 只能用 WebSocket (over TCP), 不需要你管理 socket ports.

  • 資深大佬 : maplelin

    我寻思 websocket 也不存在的粘包啊,不会有人自己实现一个协议吧

  • 資深大佬 : oneisall8955

    逐渐偏离主题,打起来打起来

  • 主 資深大佬 : awanganddong

    乃们啊,就因为粘包打起来了。

  • 資深大佬 : xhinliang

    浏览器能用裸 TCP 么,粘包党?
    哈哈

  • 資深大佬 : muzuiget

    不懂粘包,说明混 V2EX 不够久(狗头)。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

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

51la

4563博客

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