Whats the issue?: There are many Rails servers that are multi threaded. Lets take the example of Puma, it uses threads pool. The default thread count is 16. This means the server can server 16 requests concurrently.
This is sufficient for normal applications. But if you are integrating with a third party services which is going to take long time for response you have the risk of taking the site down if all the threads are used at the same time. Take a look at the following picture.
If a hacker tries to hit the site with multiple(more than the thread count) concurrent 3rd party api requests the site goes down when once the threads gets exhausted.
Whats the solution:
We can fix this by request pooling which is not a recommended solution. I recommend websockets is way to go. They are light weight(as they dont carry more information in request headers) and can have a two way communication once connection is established.
It doesn’t exhaust you thread pool.
There are many ways to implement web sockets. Check this post which has a detailed explanation of different ways.
I personally have burnt my hands trying to use ActionCable for Rails + F/E framework app. You can find it here.
Having said all this i found another solution Pusher . After getting mad at ActionCable i found Pusher to the rescue. I recommend pusher for following reasons.
- Maintenance: As we communicate through Pusher api we dont need to worry about websocket server. No need to worry about socket connection errors.
- Ease of Integration: Pusher has api to integrate in almost all the languages. It takes less than 5 mins to use it when you signup.
- Usage: Their free account gives us adequate amount of messages per day. Good for us to try it.