Is there a case for sending batches to the client from the server? For instance, say 2000 is the QOS, does it get an ack and then send another?
Could it use an 80/20 rule for sending the 20% in a single network stream, chunked at data size x (cater for large messages), when the 400th item is acked? Or Math.Ciel((QOS/100)*20). I expect this would increase performance in cases where message size is less than ~17k. And at socket connect time, does it send the QOS as a batch, or does it send one at a time?
Is there a case for checking the registry for the TCP Window Size on Windows and use that as the send/receive buffer size. I believe socket default is currently 8k send/receive. The TCP Window Size default is 17,520. Its my guess that most cloud based machines have had this setting optimized, And possibly using the powershell optimizations at
https://msdn.microsoft.com/en-us/library/cc594541(v=bts.10).aspx. My PC has been optimized up to 64,420 using this. Our network administrators chose 25,600, on a 10GiB network, I suspect it should be higher.
Is there a case for a changing the protocol, to allow on send of the header to specify the endian of the client, so that the server can respond in the correct endian, would improve read performance if we didn't have to use the networkbinaryreader, and instead simply used binaryreader.
Is there a case for allowing changes to QOS on a channel over time, when the consumer is running? Currently this is not possible using .NET Client.