握手后 Websocket 立即断开连接(鳄梨酱)

Posted

技术标签:

【中文标题】握手后 Websocket 立即断开连接(鳄梨酱)【英文标题】:Websocket disconnects immediately after handshake (guacamole) 【发布时间】:2021-10-06 03:24:01 【问题描述】:

请原谅格式错误,因为这是我在这里提出的第一个问题,提前感谢您的阅读! 我目前正在编写一个远程 Web 应用程序,它利用 Apache Guacamole 来允许 RDP、VNC 和 SSH 连接。我使用的组件是:

用于后端服务器的 Django - API 调用(数据库信息)和 Guacamole Websocket 传输; 我正在使用 Pyguacamole 和 Django 消费者来处理 Guacamole Server 通信; Reactjs 用于前端和代理; nginx 用于反向代理; 所有这些都托管在 Centos Stream 8 虚拟机上

基本上,我的 websocket 无法通过代理进行通信。当我在没有代理的情况下运行应用程序(centos 中的 firefox 直接运行 localhost:3000)时,鳄梨酱连接有效!虽然这是应用程序在端口 8000 上直接与 Django 服务器通信的地方。我想要的是 react 应用程序为我代理 websocket 通信到端口 8000,所以我的 nginx 代理只需要处理端口 3000 进行生产。

这是我为我的 react 代理 (src/setupProxy.js) 尝试的代码:

const  createProxyMiddleware  = require('http-proxy-middleware');
let proxy_location = '';

module.exports = function(app) 
    app.use(createProxyMiddleware('/api',  target: 'http://localhost:8000', changeOrigin: true, logLevel: "debug"  ));
    app.use( createProxyMiddleware('/ws',  target: 'ws://localhost:8000' + proxy_location, ws: true, changeOrigin: true, logLebel: "debug"  ));
;

我也已经尝试使用 http://localhost:8000 作为 ws 目标 url。此外,api 代理可以工作,但我不确定 ws 代理是否有效。发出 websocket 请求后,the consumer does a guacamole handshake, but disconnects the websocket before it can send anything back.

另外,the HPM output 显示它确实尝试升级到 websocket,但客户端立即断开连接。

如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

我设法找到了问题所在,虽然我觉得有必要更新这个帖子,但这是一个小错误。

基本上,在消费者中我使用了accept()而不是websocket_accept(),receive()而不是websocket_receive(),等等。我的粗心错误,但希望这可以帮助某人!

【讨论】:

以上是关于握手后 Websocket 立即断开连接(鳄梨酱)的主要内容,如果未能解决你的问题,请参考以下文章

Docker中的鳄梨酱图像获取空白登录页面

连接后立即断开Websocket

鳄梨酱突然停止工作; guacamole.properties 的问题

通道 Websocket 立即与 ssl 断开连接

WebSockets 握手后 Chrome 断开连接

C# socket 如何断开连接