Using Flask SocketIO Library in the Apk Generator of the Open Event Android App
Recently Flask SocketIO library was used in the apk generator of the Open Event Android App as it gave access to the low latency bi-directional communications between the client and the server side. The client side of the apk generator was written in Javascript which helped us to use a SocketIO official client library to establish a permanent connection to the server. The main purpose of using the library was to display logs to the user when the app generation process goes on. This gives the user an additional help to check what is the mistake in the file uploaded by them in case an error occurs. Here the library established a connection between the server and the client so that during the app generation process the server would send real time logs to the client so that they can be viewed by the user displayed in the frontend. To use this library we first need to download it using pip command: pip install flask-socketio This library depends on the asynchronous services which can be selected amongst the following listed below: Eventlet Gevent Flask development server based on Werkzeug Amongst the three listed, eventlet is the best performant option as it has support for long polling and WebSocket transports. The next thing was importing this library in the flask application i.e the apk generator of the app as follows: from flask_socketio import SocketIO current_app = create_app() socketio = SocketIO(current_app) if __name__ == '__main__': socketio.run(current_app) The main use of the above statement (socket.run(current_app)) is that with this the startup of the web server is encapsulated. When the application is run in debug mode it is preferred to use the Werkzeug development server. However in production mode the use of eventlet web server or gevent web server is recommended. We wanted to show the status messages currently shown to the user in the form of logs. For this firstly the generator.py file was looked upon which had the status messages and these were sent to the client side of the generator by establishing a connection between them using this library. The code written on the server side to send messages to the client side was as follows: def handle_message(message): if message not None: namespace = “/” + self.identifier; send(message, namespace = namespace) As we can see from the above code the message had to be sent to that particular namespace. The main idea of using namespace was that if there were more than one users using the generator at the same time, it would mean the send() method would send the messages to all the clients connected which would lead to the mixing up of status messages and hence it was important to use namespace so that a message was sent to that particular client. Once the server sent the messages to the client we needed to add functionality to the our client side to receive the messages from them and also update the logs area with suitable content received. For that…
