Share on FacebookTweet about this on TwitterShare on LinkedInPrint this pagePin on Pinterest

Questions:

 

1. Which tool did you use for socket.io load-tests?

2. I implemented a NodeJS chat application using socket.io and hosted as web app in Azure. There we use the Azure load balancer (2 instances). When some load is generated (and eventually the second instance is used) we get “400 Bad Request” back to the client. For some of them I can see “transport =polling” from the Chrome dev tools, therefore I was wondering whether you had the same or similar issue.

Answer:

 

“So if memory serves, we wrote a custom client that emulated the game client. It was a piece of JS we ran in multiple browsers. It would connect to the server and once placed into a game room and given the “game-start” message, each instance of the client would send dummy data packets at the usual rate. We would then spin up 50, 100, 150, etc, clients per browser and get them connecting almost at the same time. We had to use multiple browsers as they had an internal limit of max connections. One thing we were mindful of was that a new web socket connection was created by each client and Socket.io wasn’t sharing them. A netstat alerted us that even though 50 clients were running, only a few sockets were opened.

Then we kept ramping it up to see what the maximum concurrent capacity was for a given box. When things started capping out we saw sockets start closing and errors in the Network panel.

We added some logging to the server side which counted incoming connections and ensured that matched with our browser debug, then left it running overnight to make sure we didn’t have any memory leaks.

As for your second issue, I don’t recall any 400s – you might want to check you are forcing a WebSocket transport (disallowing polling from the browser). A telltale sign things aren’t working are errors during handshake as part of it takes place on one thread and some on another. I have no experience with Azure so would recommend getting things working locally, on 2 separate machines / VMs to get a working baseline”

— Daniel Jackson (previous developer at Mangahigh)

Share on FacebookTweet about this on TwitterShare on LinkedInPrint this pagePin on Pinterest