套接字 io 不能与 https 一起使用;切换回轮询
Posted
技术标签:
【中文标题】套接字 io 不能与 https 一起使用;切换回轮询【英文标题】:socket io not working with https ;switching back to polling 【发布时间】:2018-05-16 19:27:33 【问题描述】:我有在 Elastic Bean Stalk 中运行的 Node.JS 应用程序。我已经设置了 Elastic Load Balancer,并在其中设置了 SSL。
我在我的 Node.JS 中做了 socket.io。由于 nginx 配置,我无法访问它。我使用 .ebextensions 修复了它们。
现在,当我使用我的 HTTP URL 访问我的套接字 io 时,它运行良好并且它使用 WebSocket 协议本身。但是当我使用 HTTPS 时,它会切换回轮询。我该如何解决这个问题?
是否需要进行一些配置才能使其在 HTTPS 中工作?
更新:添加 transports: ['websocket'], upgrade: false 后,它只发送 websokcet 请求。但我仍然得到错误
WebSocket connection to 'wss://myurl.ca/socket.io/?EIO=3&transport=websocket' failed: WebSocket is closed before the connection is established.
【问题讨论】:
我猜你没有粘性负载平衡。您可以将客户端配置为始终以 webSocket 开头,并避免需要粘性负载平衡才能正常工作的 socket.io 初始 HTTP 轮询。详情请见Socket.io 1.x: use WebSockets only。 这有帮助。现在它只有 websocket 调用。但问题仍然存在。它尝试了 WSS,但失败了。 WebSocket 连接到“wss://www.myurl.ca/socket.io/?EIO=3&transport=websocket”失败:WebSocket 在连接建立之前关闭。 那么您的 https 凭证或您的 https socket.io 服务器代码或您的 https 设置有问题。如果没有看到更多代码和细节,我们只能胡乱猜测。 【参考方案1】:问题出在证书上。HTTPS 证书是为 www.myurl.ca 设置的。而 websocket 调用没有 www 。它只是 wss://myurl.ca。
这是一个小错误。但是将证书更改为 myurl.ca 解决了问题。
【讨论】:
以上是关于套接字 io 不能与 https 一起使用;切换回轮询的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ncat -exec 可以与 shell 脚本一起使用,但不能与 perl 脚本一起使用?