我正在创建一个应用程序(Nuxtjs
),无法确定一种将数据发送到API(expressjs
)并检索实时更新的好方法。看来我可以使用两个协议[服务器发送事件(SSE
和Axios
或Websocket(WS
)来创建“双向”连接。
这两种技术都适用于大多数浏览器,因此我认为无需添加其他库,例如socket.io
-对于那些没有当前浏览器的人(太糟糕了)。
该应用程序基于表单数据/点击的用户输入。然后,其他用户将收到该信息的通知/更新。在这一点上,用户可以做出响应并且链条继续(基本的聊天之类的信息流将迅速交换,而某些消息则可能永远不会交换)。
根据我的经验,用户流将更多地依赖于侦听更改而不是实际更改数据-因此,我为什么考虑使用SSE
。不幸的是,这两种协议都有其缺陷。
Websockets
- 并非所有组件都需要
WS
来获取/发布信息,因此,在不增加服务器费用的情况下升级基本的http连接是没有意义的。因此,将需要除WS
之外的其他方法(Axios/SSR
)。Example: Checking to see if a user name exists
- 安全防火墙可能阻止
WS
正常运行 -
express-ws
使API端的套接字变得容易 - 我相信您一个用户可以有6个以上的并发连接(可能是优缺点)
服务器发送事件
- 似乎这项技术正在逐渐淡化,取而代之的是
WS
- 听事件似乎和听
WS
的事件一样容易 - 无需升级连接,但必须在
node-spdy
API中使用expressjs
-由于多路复用,这对于WS
也是一个很好的实现方式 - 仅需少量后端代码即可设置
http2
并发出SSE
s(同样丑陋的代码-这样就可以创建函数了) - 受限于HTTP限制(6个并发连接),这是一个问题,因为用户可以轻松地将其最大化(即,打开多个聊天窗口)
TLDR
该应用程序将更倾向于“供稿”,并偶尔发布(可由Axios
处理)。但是,用户将收听多个“提要”,并且HTTP限制将成为问题。我不知道解决方案是什么,因为SSE
似乎是更好的选择,因为我不需要不断地握手。如果这种握手确实是无关紧要的(从我所读的内容来看并非如此),那么比WS
可能是更好的选择。不幸的是,关于这两者的信息太多了。
有想法吗?