场景:获取表单里边的实时状态值
一般情况下是 ajax 轮询通过 http 协议获取接口实时内容
如果用 socket 来实现的话,
是不是每个接口,后台都要起一个新的端口来提供连接。
对于这点,不太清晰。
1
jenlors 2020-10-28 09:58:42 +08:00
可以用 websocket,传输的 json 用一个 key 区分场景。
|
2
xuanbg 2020-10-28 10:01:04 +08:00
如果用 socket 来实现的话,粘包也许迟到,但不会缺席。
|
3
awanganddong OP 明白了
就是 switch case 判断 |
6
azcvcza 2020-10-28 10:04:45 +08:00
websocket 起一个,然后根据 on('message',(data)=>{})来判断 data 的 type 再进行一系列操作
|
8
nnnToTnnn 2020-10-28 10:09:52 +08:00
TCP 的流协议,哪来的包的说法,这个名词我惊呆了
|
9
xuanbg 2020-10-28 10:12:00 +08:00
@nnnToTnnn 是的,v2 不是经常出来粘包问题么,所以就调笑了一下。应用不通过应用层协议通信,而是直接往 socket 里怼数据,就会发现对方接受的数据粘在一起无法区分,俗称“粘包”。
|
11
wysnylc 2020-10-28 10:16:08 +08:00 3
我说怎么看不到粘包楼,原来早就被我 b 了
|
12
libook 2020-10-28 10:46:14 +08:00
服务端一个端口可以管理多个客户端的连接,但这个管理需要你自己在程序上做好,比如数据应该经由哪一条连接发给指定的客户端。
用 WebSocket 吧,很多问题都帮你考虑好了,另外如果你用 Node.js ,Socket.io 这个库帮你把 WebSocket 封装得开箱即用。 |
13
reus 2020-10-28 10:49:41 +08:00 via Android
Http 也可以 long pull,不用轮询
|
14
zsdroid 2020-10-28 10:54:56 +08:00
粘包警察会迟到到不会缺席
|
15
shintendo 2020-10-28 10:57:04 +08:00
粘包警察还有三十秒……哦已经到了啊
|
16
selvecui 2020-10-28 10:57:17 +08:00
tcp 粘包很常见啊,应用层做好 magic 字,起始符,结束符就好了,但是哪里比得上 websocket 方便,纯 tcp 有点底层了
|
17
baiyi 2020-10-28 10:59:26 +08:00
看起来是 watch 的场景,可以不用 websocket,直接通过 http 的持久链接来实现,也叫长链接。
具体可以搜索 HTTP 长链接、HTTP chunk 等关键词 |
18
zczy 2020-10-28 11:13:25 +08:00
直接用 Netty 的 websocket 的 example,代码都是现成的
|
19
caoyouming 2020-10-28 11:14:51 +08:00
粘包是应用层在消息边界上定义有问题吧?
|
20
stephenxiaxy 2020-10-28 11:24:08 +08:00
@xuanbg 哈哈
|
21
awanganddong OP @baiyi 项目是基于 php-fpm ,一个 http 长链接就占了一个进程,实现起来不如 socket 来的合适。
|
22
awanganddong OP |
23
des 2020-10-28 12:48:11 +08:00 via iPhone
longpoll sse websocket 都可以做到,你这种比较推荐 sse
|
24
CommandZi 2020-10-28 16:10:58 +08:00
是不是每个接口,后台都要起一个新的端口来提供连接。
不是 一个 socket 链接可以任何二进制数据,为什么要新起链接? |
25
ISSSSSSS 2020-10-28 16:19:57 +08:00
Websocket 或者 SSE 。
|
26
dcoder 2020-10-28 17:25:59 +08:00
@awanganddong 楼里各种五花八门的回答,你们是在认证帮楼主么?
我认证问楼主个问题,现在 JS web 前端可以直接用 TCP/UDP socket 和后端通信了 ?? 我记得以前是不能的. 如果不能,这个问题本身就不成立. 只能用 WebSocket (over TCP), 不需要你管理 socket ports. |
27
maplelin 2020-10-28 18:07:40 +08:00
我寻思 websocket 也不存在的粘包啊,不会有人自己实现一个协议吧
|
28
oneisall8955 2020-10-28 18:37:07 +08:00 via Android
逐渐偏离主题,打起来打起来
|
29
awanganddong OP 乃们啊,就因为粘包打起来了。
|
30
xhinliang 2020-10-28 21:19:05 +08:00
浏览器能用裸 TCP 么,粘包党?
哈哈 |
31
muzuiget 2020-10-29 13:39:22 +08:00
不懂粘包,说明混 V2EX 不够久(狗头)。
|