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

2020-10-28 09:53:51 +08:00
 awanganddong

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

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

如果用 socket 来实现的话,

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

对于这点,不太清晰。

3709 次点击
所在节点    程序员
31 条回复
jenlors
2020-10-28 09:58:42 +08:00
可以用 websocket,传输的 json 用一个 key 区分场景。
xuanbg
2020-10-28 10:01:04 +08:00
如果用 socket 来实现的话,粘包也许迟到,但不会缺席。
awanganddong
2020-10-28 10:01:50 +08:00
明白了

就是 switch case 判断
nnnToTnnn
2020-10-28 10:03:00 +08:00
@xuanbg 粘包 是什么? 有一说一我用 TCP /UDP 完全没听说过粘包
xuanbg
2020-10-28 10:04:08 +08:00
@xuanbg 然后你需要自己设计一个应用层协议来实现表单状态的实时下发。
azcvcza
2020-10-28 10:04:45 +08:00
websocket 起一个,然后根据 on('message',(data)=>{})来判断 data 的 type 再进行一系列操作
nnnToTnnn
2020-10-28 10:05:32 +08:00
刚查了一下资料 `TCP 是流协议,根本不存在所谓粘包一说。` 我猜应该是应用层没处理好流导致的 @xuanbg #2L
nnnToTnnn
2020-10-28 10:09:52 +08:00
TCP 的流协议,哪来的包的说法,这个名词我惊呆了
xuanbg
2020-10-28 10:12:00 +08:00
@nnnToTnnn 是的,v2 不是经常出来粘包问题么,所以就调笑了一下。应用不通过应用层协议通信,而是直接往 socket 里怼数据,就会发现对方接受的数据粘在一起无法区分,俗称“粘包”。
xuanbg
2020-10-28 10:13:18 +08:00
@nnnToTnnn 所以粘包不仅是一个伪问题,还是一个生造出来的伪概念。
wysnylc
2020-10-28 10:16:08 +08:00
我说怎么看不到粘包楼,原来早就被我 b 了
libook
2020-10-28 10:46:14 +08:00
服务端一个端口可以管理多个客户端的连接,但这个管理需要你自己在程序上做好,比如数据应该经由哪一条连接发给指定的客户端。

用 WebSocket 吧,很多问题都帮你考虑好了,另外如果你用 Node.js ,Socket.io 这个库帮你把 WebSocket 封装得开箱即用。
reus
2020-10-28 10:49:41 +08:00
Http 也可以 long pull,不用轮询
zsdroid
2020-10-28 10:54:56 +08:00
粘包警察会迟到到不会缺席
shintendo
2020-10-28 10:57:04 +08:00
粘包警察还有三十秒……哦已经到了啊
selvecui
2020-10-28 10:57:17 +08:00
tcp 粘包很常见啊,应用层做好 magic 字,起始符,结束符就好了,但是哪里比得上 websocket 方便,纯 tcp 有点底层了
baiyi
2020-10-28 10:59:26 +08:00
看起来是 watch 的场景,可以不用 websocket,直接通过 http 的持久链接来实现,也叫长链接。

具体可以搜索 HTTP 长链接、HTTP chunk 等关键词
zczy
2020-10-28 11:13:25 +08:00
直接用 Netty 的 websocket 的 example,代码都是现成的
caoyouming
2020-10-28 11:14:51 +08:00
粘包是应用层在消息边界上定义有问题吧?
stephenxiaxy
2020-10-28 11:24:08 +08:00
@xuanbg 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX