1*1c60b9acSAndroid Build Coastguard Worker# lws minimal ws client binance 2*1c60b9acSAndroid Build Coastguard Worker 3*1c60b9acSAndroid Build Coastguard WorkerThis connects to the binance ws server and monitors transactions with 4*1c60b9acSAndroid Build Coastguard Workeran eye on low latency. 5*1c60b9acSAndroid Build Coastguard Worker 6*1c60b9acSAndroid Build Coastguard WorkerLatency seems to be associated with server-side coalescing at tls 7*1c60b9acSAndroid Build Coastguard Workerlayer, and the coalescing at server side seems somewhat correlated to number 8*1c60b9acSAndroid Build Coastguard Workerof transactions per second, which seems to cause increased packet sizes from the 9*1c60b9acSAndroid Build Coastguard Workerserver as a reaction. The relationship is more complex probably according to what 10*1c60b9acSAndroid Build Coastguard Workeractually happens at the server backend, but it seems to be broadly related 11*1c60b9acSAndroid Build Coastguard Workerreliably. 12*1c60b9acSAndroid Build Coastguard Worker 13*1c60b9acSAndroid Build Coastguard WorkerTypically when showing low latency at ~70msg/s, the messages on the wire are 14*1c60b9acSAndroid Build Coastguard Workereg, ~70 byte packets containing small tls records 15*1c60b9acSAndroid Build Coastguard Worker 16*1c60b9acSAndroid Build Coastguard Worker10:14:40.682293 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42952: Flags [P.], seq 50846:50927, ack 1, win 11, options [nop,nop,TS val 366445630 ecr 3893437035], length 81 17*1c60b9acSAndroid Build Coastguard Worker 18*1c60b9acSAndroid Build Coastguard Workerunder pressure from increased messages per second, the tls records increase above 2KB 19*1c60b9acSAndroid Build Coastguard Worker 20*1c60b9acSAndroid Build Coastguard Worker08:06:02.825160 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42688: Flags [.], seq 512319:513643, ack 1, win 11, options [nop,nop,TS val 3990208942 ecr 3885719233], length 1324 21*1c60b9acSAndroid Build Coastguard Worker08:06:02.825290 IP constance.42688 > ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https: Flags [.], ack 513643, win 14248, options [nop,nop,TS val 3885719479 ecr 3990208942], length 0 22*1c60b9acSAndroid Build Coastguard Worker08:06:02.891646 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42688: Flags [.], seq 513643:516291, ack 1, win 11, options [nop,nop,TS val 3990209006 ecr 3885719296], length 2648 23*1c60b9acSAndroid Build Coastguard Worker 24*1c60b9acSAndroid Build Coastguard WorkerThe larger the packets, the longer the first item in the packet had to 25*1c60b9acSAndroid Build Coastguard Workerwait before it was sent, and a tls record cannot be authenticated until 26*1c60b9acSAndroid Build Coastguard Workerall of it has been received. 27*1c60b9acSAndroid Build Coastguard Worker 28*1c60b9acSAndroid Build Coastguard WorkerThe example circumvents this somewhat by using `permessage_deflate`, which reduces 29*1c60b9acSAndroid Build Coastguard Workerthe packet size before tls by applying compression, making even coalesced packets 30*1c60b9acSAndroid Build Coastguard Workersmaller, and a new option for adjusting how lws manages conflicting requirements to 31*1c60b9acSAndroid Build Coastguard Workerclear pending rx and allow interleaved tx, `LCCSCF_PRIORITIZE_READS` that causes the 32*1c60b9acSAndroid Build Coastguard Workerstream to prioritize handling any pending rx, not just pending at ssl layer, in one 33*1c60b9acSAndroid Build Coastguard Workerevent loop trip. 34*1c60b9acSAndroid Build Coastguard Worker 35*1c60b9acSAndroid Build Coastguard Worker## build 36*1c60b9acSAndroid Build Coastguard Worker 37*1c60b9acSAndroid Build Coastguard WorkerLws must have been built with `LWS_ROLE_WS=1` and `LWS_WITHOUT_EXTENSIONS=0` 38*1c60b9acSAndroid Build Coastguard Worker 39*1c60b9acSAndroid Build Coastguard Worker``` 40*1c60b9acSAndroid Build Coastguard Worker $ cmake . && make 41*1c60b9acSAndroid Build Coastguard Worker``` 42*1c60b9acSAndroid Build Coastguard Worker 43*1c60b9acSAndroid Build Coastguard Worker## Commandline Options 44*1c60b9acSAndroid Build Coastguard Worker 45*1c60b9acSAndroid Build Coastguard WorkerOption|Meaning 46*1c60b9acSAndroid Build Coastguard Worker---|--- 47*1c60b9acSAndroid Build Coastguard Worker-d|Set logging verbosity 48*1c60b9acSAndroid Build Coastguard Worker 49*1c60b9acSAndroid Build Coastguard Worker## usage 50*1c60b9acSAndroid Build Coastguard Worker 51*1c60b9acSAndroid Build Coastguard Worker``` 52*1c60b9acSAndroid Build Coastguard Worker$ ./bin/lws-minimal-ws-client-binance 53*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:49:3003] U: LWS minimal binance client 54*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:49:3005] N: LWS: 4.0.99-v4.1.0-rc2-4-g3cf133aef, loglevel 1031 55*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:49:3005] N: NET CLI SRV H1 H2 WS MQTT SS-JSON-POL SSPROX ASYNC_DNS IPv6-absent 56*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:50:8243] N: checking client ext permessage-deflate 57*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:50:8244] N: instantiating client ext permessage-deflate 58*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:50:8244] U: callback_minimal: established 59*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:51:8244] N: sul_hz_cb: price: min: 1160284¢, max: 1163794¢, avg: 1160516¢, (150 prices/s) 60*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:51:8245] N: sul_hz_cb: elatency: min: 112ms, max: 547ms, avg: 259ms, (155 msg/s) 61*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:52:8244] N: sul_hz_cb: price: min: 1160287¢, max: 1178845¢, avg: 1160897¢, (112 prices/s) 62*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:52:8245] N: sul_hz_cb: elatency: min: 111ms, max: 226ms, avg: 152ms, (134 msg/s) 63*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:53:8247] N: sul_hz_cb: price: min: 1160287¢, max: 1168005¢, avg: 1160806¢, (86 prices/s) 64*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:53:8248] N: sul_hz_cb: elatency: min: 112ms, max: 476ms, avg: 287ms, (101 msg/s) 65*1c60b9acSAndroid Build Coastguard Worker[2020/08/23 10:22:54:8247] N: sul_hz_cb: price: min: 1160284¢, max: 1162780¢, avg: 1160698¢, (71 prices/s) 66*1c60b9acSAndroid Build Coastguard Worker... 67*1c60b9acSAndroid Build Coastguard Worker``` 68