如何让 WebSocket 服务器在 aws 上运行

Posted

技术标签:

【中文标题】如何让 WebSocket 服务器在 aws 上运行【英文标题】:How to get a WebSocket server run on aws 【发布时间】:2014-07-12 16:31:15 【问题描述】:

我正在开发一个需要实时双向服务器/客户端消息传递的 ios 应用程序。

我正在尝试使用WebSocket++ 在 AWS EC2 上开发 WebSocket 服务器应用程序。必须使用 C++,因为这是我在服务器端知道的唯一语言。 问题是我是服务器端开发的新手。我有 2 个非常基本的问题:

1,为了让 websocket 运行,我是否需要设置一个像 apache/nginx 这样的 HTTP 服务器? 也就是websocket app可以单独独立存在吗?

2,我现在已经设置了一个 nginx 服务器,以防万一,有什么资源可以参考让 nginx 和 websocket 一起工作吗?

【问题讨论】:

【参考方案1】:

    不,您不需要 Web 服务器、(反向)Web 代理或任何东西来让您的 C++ WebSocket 服务器与 WebSocket 客户端通信。

    Nginx(作为 HAproxy)支持反向代理 WebSocket。这在某些情况下是有意义的,例如您想在代理上终止 TLS 并将纯 WebSocket 转发到您的后端服务器,或者您希望将传入的 WebSocket 连接负载平衡到多个后端节点。但是,如上所述,这不是必需的。

【讨论】:

那么当我尝试连接到 websocket 服务器时,如何指定 URL?我看到一个这样的: wss://echo.websocket.org 。那么是 ws://MY_DOMAIN:MY_PORT 吗?类似 ws://88.88.88.88:9002 ws(和wss)方案用于在浏览器上运行的 javascript。当您从浏览器连接时,请使用ws://MYHOST:MYPORT/MYPATH(注意路径..您可以在同一主机/端口上的不同路径上运行不同的 WS 端点)。当您在 WS 中使用标准端口 (80/443) 时,您可以省略该端口。从非浏览器客户端连接时,只需通过 TCP 连接到位于 MYPORT 的 MYHOST。【参考方案2】:
    不,你不知道,用于 HTTP 服务器的 websocket 和套接字是两个不同的东西。 HTTP 服务器用于 HTTP 协议,而没有为 websocket 定义协议,您通常必须通过发送/接收 Json 消息(每一方(服务器和客户端)都知道的字符流)来自己定义它读/写)。 websocket 的目标是通过 html5 为 javascript 提供一种通过套接字进行通信的简单、轻便和快速的方式,如果没有 websocket,您必须使用 web 服务来做到这一点,在这种情况下,您需要一个 http 服务器。 使用 websocket,您可以利用 html 标签和 javascript 创建一个 html 文件,javascript 使用 websocket 的客户端与 C++/websocket 服务器程序进行通信,您甚至不需要 web 服务器,在这种情况下,您有一个“桌面 web 应用程序” “! (这里的web术语只是因为你使用了html标签) 同样的问题,同样的答案,没有了 ;-)

祝你好运,欢迎来到 asio 的精彩世界!

【讨论】:

以上是关于如何让 WebSocket 服务器在 aws 上运行的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 AWS 以无服务器方式订阅 WebSocket?

通过 websocket 连接 AWS MQTT

带有 ALB 的 AWS Elastic Beanstalk:节点 Websocket 超时

在 AWS 上使用 WebSocket 实现的 Web 服务上的蓝绿部署

使用 AWS 和 Elastic Beanstalk 的 Websocket

Websocket rails (Faye-websocket) 握手错误代码 200 - AWS ElasticBeanstalk、nginx、puma