SSE,Web套接字和普通HTTP请求(通过AJAX或Fetch API)都是用于不同作业的不同工具。
我正在创建一个应用程序(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端的套接字变得容易服务器发送事件
WS
;>WS
的事件一样容易node-spdy
API中使用expressjs
-由于多路复用,这对于WS
也可能是一个很好的实现http2
并发出SSE
s(同样还有丑陋的代码-因此将完成功能)TLDR 应用程序偶尔会过分定位(可以由Axios
处理),因此其定位更“饲料”。但是,用户将收听多个“提要”,并且HTTP限制将成为问题。我不知道解决方案是什么,因为SSE
似乎是更好的选择,因为我不需要不断地握手。如果这种握手确实是无关紧要的(从我所读的内容来看并非如此),那么WS
可能是更好的选择。不幸的是,关于这两者的信息太多了。
想法?
我正在创建一个应用程序(Nuxtjs),并且难以确定一种将数据发送到API(expressjs)并检索实时更新的好方法。看来我可以创建“ bi-di” ...
SSE,Web套接字和普通HTTP请求(通过AJAX或Fetch API)都是用于不同作业的不同工具。
根据您的描述,听起来SSE或Web套接字都适合您的用例。我可能会倾向于SSE,同时使用常规HTTP请求从客户端发送随机API调用。
我不知道解决方案是什么,因为SSE似乎是更好的选择,因为我不需要不断地握手。如果这种握手确实是无关紧要的(从我读过的所有内容来看并不是这样),那么比WS可能是更好的选择。
请记住,您可以简单地使用HTTP保持活动配置服务器,这很重要。
我本人避免将websockets
用作client
和server
之间的双向通讯。
我尝试使用broadcast data from server to users or a single user(socket)
套接字,以便它们可以获取实时更新,但是对于从客户端到服务器的发布请求,我倾向于使用axios或类似的东西,因为我不想传递敏感数据( (例如访问键等)从client
到server
。
我的数据流类似
axios
,SSE
或其他将数据发布到服务器我使用套接字将数据从客户端发送到服务器的问题是身份验证问题。从技术上讲,您不能通过套接字传递客户端JavaScript无法使用的anything,这意味着要验证操作,您将必须通过websocket发送敏感信息。这是一个有多个原因的问题-如果可以使用客户端js访问敏感数据,则可以在此处进行大量攻击。也有人可以收听ws和客户端之间的通信。这就是为什么我使用API调用(axios等)并将敏感数据存储到仅HTTP cookie中的原因。 因此,一旦服务器想通知用户发生了什么事,您可以通过告诉websocket服务器将数据发送给用户来轻松地做到这一点。
您还希望API服务器保持无状态,这意味着API中没有套接字。我仅将单独的服务器用于websocket连接,而我的API服务器和websocket服务器使用Redis进行通信。发布/订阅是用于内部服务器通信和状态管理的非常整洁的功能。
并回答有关多个连接的问题-您可以在websocket服务器和客户端之间使用单个连接,并使用频道广播数据。因此,一个频道用于通知提要,另一个频道可以用于故事提要,等等。
我希望这对您有意义。该堆栈对我确实非常有用。
SSE,Web套接字和普通HTTP请求(通过AJAX或Fetch API)都是用于不同作业的不同工具。
我本人避免将websockets
用作client
和server
之间的双向通讯。
我尝试使用broadcast data from server to users or a single user(socket)
套接字,以便它们可以获取实时更新,但是对于从客户端到服务器的发布请求,我倾向于使用axios或类似的东西,因为我不想传递敏感数据( (例如访问键等)从client
到server
。