We have seen the following behaviour below in our application. Could you please have a look and any ideas on how we can reduce this delay?
Within our application, there appears to be a delay from when client login responses are passed to the “rsslWrite” function to appearing on the wire (from a network capture/pcap file) in the test scenario shown in the diagram. The sequence of events is
1. Client connects to our application, from RMDSTestClient -> EED -> our application, and sets up a private stream connection.
2. A TS request is sent from RMDSTestClient which will result in many responses being returned by our application
3. Once UPAComms in our application starts sending responses, the connection is closed from the RMDSTestClient which the re-establishes the connection immediately after
4. A client login request message is sent to our application and then the response is passed to “rsslWrite” function, and at this point there can be a delay of up to 40 seconds before this appears in the pcap file.
Please ensure that you are using rsslWrite and rsslFlush in the correct manner. By design, rsslWrite does not guarantee content is pushed out to the wire. For efficiency on the wire and reduced overhead due to system calls, this method will queue content. rsslFlush will take queued content and try to do bulk writes to the network with as much queued content as possible.
The return values from both rsslWrite and rsslFlush indicate how many bytes remain queued. I suspect that you are not calling rsslFlush and then the first time you call rsslPing this is resulting in your content being pushed out to the wire. rsslPing will either send a ping message if no content is queued or it will invoke a call to rsslFlush if any content is queued.
All of this is documented in the UPA Developers Guide Chapter 9: Reliable Transport Package Detailed View. Section 9.7 talks about writing data, which covers all of the outbound methods (rsslWrite, rsslFlush, rsslGetBuffer, rsslReleaseBuffer, rsslPing) and it has code samples in the document to illustrate all of the information. Additionally, the UPA examples also show this functionality in action.