AWS应用负载均衡器默认不支持Websocket连接,需要配置一些额外的设置。以下是一个Websocket在AWS Elastic Beanstalk上运行的示例Python应用程序。
首先,在应用程序下的.ebextensions文件夹中创建一个config文件(例如,websocket.config)。并添加以下内容:
Resources: AWSEBLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: LoadBalancerAttributes: - Key: websocket.enable Value: true
这会启用Websocket,并在负载均衡器上添加一个websocket.enable属性。接下来,该应用程序需要在WSGI服务器中启用Websocket支持。我们可以使用gevent-websocket库来完成这个任务。在pip中安装gevent-websocket:
pip install gevent-websocket
然后在应用程序的main.py文件中,使用Flask和gevent-websocket库创建一个简单的Websocket应用程序(以下示例适用于Python 3):
from flask import Flask from geventwebsocket.handler import WebSocketHandler from geventwebsocket.server import WSGIServer
app = Flask(name) app.debug = True
@app.route('/ws') def ws(): ws = request.environ.get('wsgi.websocket') if not ws: return "Websocket required" while True: message = ws.receive() ws.send('Received: ' + message)
if name == "main": http_server = WSGIServer(('', 5000), app, handler_class=WebSocketHandler) http_server.serve_forever()
最后,在AWS Elastic Beanstalk上部署应用程序,确保选择最新的Amazon Linux AMI以获取更新的WebSocket支持(AMI ID: ami-0323c3dd2da7fb37d)。
参考链接:https://medium.com/@shabda/flask-socketio-using-amazon-elastic-beanstalk-websockets-1e76047a6acc