There are several cases of close forced on the server side.
It may be a close requested via JMX or by the Metadata Adapter or a refusal due to configured exclusion rules.
Do you see any explanation message in the Server log just before the reported message?
If not, please try setting the LightstreamerLogger.connections logger at INFO level.

Case 31 ("Destroy invoked by client") is more common.
In fact, a client can close a session at will and it is sufficient for it to close the TCP connection.
However, the client SDK libraries, when possible, also send a "destroy" request to the Server before closing, to ensure that the Server also closes the TCP connection on its side.
If the "destroy" reaches the Server, the Server logs code 31, but the case is not different from the more common 38 ("Connection interrupted by client").