Matthew Ha
Matthew Ha

Reputation: 55

Deploying Flask Socket.io application with eventlet on heroku

I am using flask socket.io configured with eventlet on a free heroku instance. According to the flask socket.io documentation: https://flask-socketio.readthedocs.io/en/latest/ running socketio.run(app) will start a webserver if eventlet is installed.

I have a local react web app attempting to establish a WebSocket connection with this app engine instance. The web app uses socket.io and initially defaults to polling HTTP requests. These requests all timeout-- I'm unable to establish a web socket connection. I'm not sure what might be causing my issue, whether it is my app engine configuration or my flask socket.io setup.

Here is my initialization code for flask socket.io:

app = Flask(__name__)
socketio = SocketIO(app)
socketio.init_app(app, cors_allowed_origins="*")
..
..
if __name__ == '__main__':
    socketio.run(app, debug=True)

Here is my Procfile:

web: python3 server.py

Here is the web app code attempting to set up the connection:

import io from 'socket.io-client'
const socketURL = "<app-engine-instance-url>:5000"
const socket = io.connect(socketURL)

Upvotes: 1

Views: 850

Answers (1)

Miguel Grinberg
Miguel Grinberg

Reputation: 67502

You mentioned Heroku, then switched to App Engine. I assume you still meant Heroku?

The application running on Heroku must honor the $PORT environment variable and put the website on that port. Try this:

socketio.run(app, port=int(os.environ.get('PORT', '5000')))

Then from your client application connect to the Heroku URL for your app.

Upvotes: 1

Related Questions