3

我和我的团队正在 Meteor 中实现基于服务的架构。

我们有前端服务。这只是使用默认的 Meteor 连接。我们还有许多后端服务(例如聊天、搜索),我们通过前端通过DDP.connect(service_url).

在前端服务的环境变量中,我们有DISABLE_WEBSOCKETS=1. 我们还将此环境变量设置为其他服务的相同值。

前端在连接到自身时使用长轮询(默认情况下)。但是,当前端尝试连接到其他服务时,不会禁用 websocket。而且,DDP 并没有退回到长轮询。

具体来说,它首先尝试建立 websocket 连接,然后失败,尝试了几次 XHR 请求。冲洗并不断重复。它这样做了数百次,而且速度非常快。结果,一切都挂了。

WebSocket connection to 'wss://user.example.com/sockjs/884/ll_pzrru/websocket' failed: WebSocket is closed before the connection is established.
XHR finished loading: POST "https://user.example.com/sockjs/121/tmt57ih1/xhr_send".w._start
XHR finished loading: POST "https://user.example.com/sockjs/924/0i0c9_4f/xhr_send".w._start
XHR finished loading: POST "https://user.example.com/sockjs/221/ea72ap33/xhr".
WebSocket connection to 'wss://user.example.com/sockjs/884/ll_pzrru/websocket' failed: WebSocket is closed before the connection is established.
XHR finished loading: POST "https://user.example.com/sockjs/121/tmt57ih1/xhr_send".w._start
XHR finished loading: POST "https://user.example.com/sockjs/924/0i0c9_4f/xhr_send".w._start
XHR finished loading: POST "https://user.example.com/sockjs/221/ea72ap33/xhr".

当使用多个应用程序时,我们如何让 DDP 回退到长轮询?

4

0 回答 0