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