@Atani and anyone else who may remember. Looking through the JMRI source code, we found that JMRI sends the <s> status command every 30 seconds. But it doesn't do this for a direct USB connection. Why? My guess is that it has something to do with picking up turnout and sensor changes, but I don't know that. Maybe a heartbeat of some kind or to account for a dropped connection?
I believe this is the reason for it. When operating over a non-direct connection (USB) the connection may go bad and JMRI may not detect and reconnect automatically.
DCC++ EX droppes the TCP/IP connection after some minutes if you don't send a heartbeat. In my case on a Wifi connection. Thought it was wanted? Maybe to prevent death connections?
There may be an AT command to tell the ESP8266 to not timeout. I'll look. But Ethernet would probably not have this. Engine Driver has a keep alive for its connection. More research required!
There does seem to be a normal timeout with any TCP connection. I think the default is 30 seconds. So we can send a heartbeat to keep it connected.