read larger data streams over sockets - broken?
Phil Davis
revdev at pdslabs.net
Wed Dec 6 18:51:50 EST 2017
Is anyone else having problems with moving multi-MB data streams across
sockets in LC 8?
I support a LAN-based system that relies on sockets to move data between
server and clients. The server's response to a single client request
will often consist of several hundred KB to several MB of data. Until LC
8 the successful approach has been:
- client sends request to server
- server returns data to client
- client reads the returned data:
read from socket tMySocket for 1 line -- contains the length of the
data that follows
put it into tDataLength
repeat while length(tData) < tDataLength
read from socket tMySocket for tDataLength
wait 1 millisecond with messages
put it after tData
end repeat
This approach no longer works in LC 8. There are 2 new issues:
- large time delays
- wrong final data size
Here are some actual results from a client that was trying to receive
151k of data - not that big!
tDataLength = 151954
read #1 got 0 chars in 15.25521 secs
read #2 got 131761 chars in 15.001723 secs
read #3 got 131761 chars in 0.001813 secs
actual received data length = 263522
total elapsed time = 30.259262 secs
I changed the client code to read 'until EOF' and got similar outcomes:
tDataLength = 151954
read until EOF #1 got 0 chars in 15.254117 secs
read until EOF #2 got 131761 chars in 15.004341 secs
read until EOF #3 got 131761 chars in 0.001733 secs
actual received data length = 263522
total elapsed time = 30.260464 secs
Either 'read' structure works fine as long as the data length doesn't
exceed roughly 128k (that's the max in my world at least - YMMV). I'm
not sure if the 128k size constraint is coming from LC or from my
network (a standard gigabit-Ethernet LAN with router, switches,
computers) or from some other source.
I know this is a bug and plan to file a bug report, but I wanted to see
if anyone else has experienced something similar.
Thanks -
Phil Davis
--
Phil Davis
More information about the use-livecode
mailing list