This fix is to address time outs with Direct Line causing a 500:Connect ETIMEDOUT error under high loads –
- Use the AgentKeepAlive NPM module to ensure re-use of the SSL connections
- Tune the MaxSockets parameter of the AgentKeepAlive instance to be at least 160 to match the number of SNAT port.
const Agent = require('agentkeepalive'); const keepaliveAgent = new Agent({ maxSockets: 160, maxFreeSockets: 10, timeout: 60000, freeSocketKeepAliveTimeout: 30000, // free socket keepalive for 30 seconds });
Note: If you have set IISNode nodeProcessCountPerApplication = “0” to use all CPU’s for the Node process, then you will need to adjust the MaxSockets accordingly. For example, on a 4 CPU instance size (P4) you will have 4 Node Processes so MaxSockets will need to be set to 40 .
References:
Thanks and happy coding!
The Bot Framework Team