我有一个Chrome容器(使用此Dockerfile部署),可应要求从App容器渲染页面。
基本流程是:
ws://chrome.example.com:9222/devtools/browser/13400ef6-648b-4618-8e4c-b5c73db2a122
)puppeteer.connect({ browserWSEndpoint: webSocketUrl })
:对于单个Chrome容器,效果很好。
但我正在尝试扩大规模,以在Docker群中拥有多个Chrome容器。
我认为问题在于,App接收到的websocket
URL特定于在该特定Chrome容器中运行的实例,因此,当App使用它(并且现在有多个Chrome容器)时,来自App的websocket请求将不一定会路由到正确的Chrome容器。
处理此问题的最佳方法是什么?
您的基本设计正确,但是您遇到的问题是会话“粘性”。但是,与其尝试将后续请求重新路由回适当的计算机,不如寻找一种避免“预”请求的方法。
最好的方法是让您的Chrome泊坞窗图片位于所有http“升级”请求的中间人。此http动作是所有WebSocket连接在更改协议(包括puppeteer库,它只是一个WebSocket客户端)之前发出的内容。这样做还可以避免进行预连接呼叫,因为到Chrome的代理将发生在升级过程中,而不是公开要使用的URL。这是使用http-
proxy
模块执行此操作的一个非常基本的示例:
const http = require('http');
const httpProxy = require('http-proxy');
const proxy = new httpProxy.createProxyServer();
http
.createServer()
.on('upgrade', async(req, socket, head) => {
const browser = await puppeteer.launch();
const target = browser.wsEndpoint();
proxyy.ws(req, socket, head, { target })
})
.listen(3000);
这种方法还有其他好处:您可以限制诸如并发之类的内容,甚至可以注入脚本以在以后运行。这些虽然需要更多和准备,但总体思路仍然相同。这也使负载平衡变得微不足道,因为不需要使路由变得固定。
如果这是您感兴趣的事情,那么您可以在无浏览器的存储库中为您完成所有工作。它甚至允许诸如并发限制,会话时间限制之类的功能,并包括功能丰富的IDE。您可以在此处找到有关该项目的更多文档。
> 我正试图弄清楚Kubernetes中的网络,尤其是多集装箱吊舱的处理。在我的简单场景中,我总共有3个豆荚。其中一个有两个容器,另一个只有一个容器,它希望与多容器吊舱中的特定容器通信。我想弄清楚kubernetes如何处理此类容器之间的通信。 为此,我在一个“sidecar体系结构”中有一个简单的多容器吊舱,YAML文件如下所示: > 我想用这个YAML文件实现的是,在pod“nginx”中,有
Web主要围绕HTTP的请求/响应范例构建。客户端加载网页,然后在用户点击下一页之前没有任何操作。大约在2005年,AJAX开始让网络感觉更有活力。仍然,所有HTTP通信都由客户端引导,这需要用户交互或定期轮询以从服务器加载新数据。 使服务器能够在知道新数据可用的瞬间将数据发送到客户端的技术已存在很长时间了。它们的名称如“Push”或“Comet”。 将套接字引入Web Websocket规范定义
null 转发每个进程的输出 监视是否有子进程死亡,并在此情况下重新启动整个容器 在缩放/停止/重新启动等时优雅地关闭所有进程。
问题内容: 有两个Java文件,Server.java和Client.java。两者都放在单独的容器中。 DOCKER FILES: 我用于服务器的dockerfile(位于名为“ Server”的文件夹中)为: 客户端的dockerfile(位于名为``Client’‘的文件夹中)为: 构建容器: 使用以下容器构建容器 运行容器: 我使用命令运行图像。然后我首先运行serverimage。 我得
问题内容: 我对docker,redis和任何类型的网络都是陌生的(至少我了解python!)。首先,我想出了如何获取redis docker映像并在docker容器中运行它: 据我了解,此Redis实例具有可用于连接其他容器的端口6379。 如果运行以下命令,则可以与redis实例进行交互并生成key:value对: 我已经弄清楚如何制作并运行安装了redis库的docker容器,该容器将运行p
我有2个Docker容器:App 应用程序-包含php应用程序代码的简单容器。它仅用于存储代码并将代码传递到远程Docker主机。 应用映像Dockerfile: Web服务容器,由PHP-FPM Nginx组成。 Web image Dockerfile: 我的问题:是否可以通过套接字链接Web容器和App容器? 主要原因是使用应用程序容器将更新的代码部署到远程Docker主机。使用卷/命名卷在