Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: eventstream listen on socket for close/end event #5795

Merged
merged 2 commits into from
Jul 24, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Jul 24, 2023

Motivation

Previous PR #5784 resolved issue #5783 but "hijacking" the response (res.hijack()) should not be necessary and it is hard to understand all side-effects this has even though as far as I understand in our case it does not have any (#5784 (comment)).

I noticed, that in fastify-sse there is a note about removing event listeners (https://github.com/NodeFactoryIo/fastify-sse-v2#note) and there it adds a listener to socket, not the stream (thanks @mpetrunic for the pointers).

I looked into the timings of this and it seems like socket end event is emitted before stream is closed causing event listeners to be aborted earlier. This avoids a race condition trying to send an event even though stream is already closed causing the header already sent error (#5783).

Description

  • Removes previously added res.hijack()
  • Listen on socket for close/end event instead of stream.

Note: It might be sufficient to just listen to socket end event but hard to test all edge cases.

@nflaig nflaig requested a review from a team as a code owner July 24, 2023 11:10
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 6913836 Previous: 919e797 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 564.20 us/op 593.70 us/op 0.95
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 94.850 us/op 98.205 us/op 0.97
BLS verify - blst-native 1.3085 ms/op 1.5031 ms/op 0.87
BLS verifyMultipleSignatures 3 - blst-native 2.7820 ms/op 2.6167 ms/op 1.06
BLS verifyMultipleSignatures 8 - blst-native 5.9143 ms/op 5.6901 ms/op 1.04
BLS verifyMultipleSignatures 32 - blst-native 20.495 ms/op 20.542 ms/op 1.00
BLS aggregatePubkeys 32 - blst-native 28.774 us/op 27.041 us/op 1.06
BLS aggregatePubkeys 128 - blst-native 113.51 us/op 106.93 us/op 1.06
getAttestationsForBlock 65.246 ms/op 79.552 ms/op 0.82
isKnown best case - 1 super set check 485.00 ns/op 529.00 ns/op 0.92
isKnown normal case - 2 super set checks 481.00 ns/op 479.00 ns/op 1.00
isKnown worse case - 16 super set checks 477.00 ns/op 474.00 ns/op 1.01
CheckpointStateCache - add get delete 6.1390 us/op 6.1960 us/op 0.99
validate api signedAggregateAndProof - struct 2.9323 ms/op 3.8217 ms/op 0.77
validate gossip signedAggregateAndProof - struct 2.9338 ms/op 3.2072 ms/op 0.91
validate api attestation - struct 1.4955 ms/op 1.6321 ms/op 0.92
validate gossip attestation - struct 1.5768 ms/op 1.7523 ms/op 0.90
pickEth1Vote - no votes 1.3149 ms/op 1.9973 ms/op 0.66
pickEth1Vote - max votes 13.044 ms/op 9.3536 ms/op 1.39
pickEth1Vote - Eth1Data hashTreeRoot value x2048 10.375 ms/op 9.7489 ms/op 1.06
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 16.262 ms/op 15.993 ms/op 1.02
pickEth1Vote - Eth1Data fastSerialize value x2048 726.16 us/op 750.92 us/op 0.97
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.6165 ms/op 5.0054 ms/op 1.52
bytes32 toHexString 762.00 ns/op 532.00 ns/op 1.43
bytes32 Buffer.toString(hex) 347.00 ns/op 313.00 ns/op 1.11
bytes32 Buffer.toString(hex) from Uint8Array 594.00 ns/op 456.00 ns/op 1.30
bytes32 Buffer.toString(hex) + 0x 345.00 ns/op 302.00 ns/op 1.14
Object access 1 prop 0.22300 ns/op 0.21600 ns/op 1.03
Map access 1 prop 0.17000 ns/op 0.16200 ns/op 1.05
Object get x1000 8.2260 ns/op 8.7760 ns/op 0.94
Map get x1000 0.80000 ns/op 0.76400 ns/op 1.05
Object set x1000 73.519 ns/op 69.190 ns/op 1.06
Map set x1000 54.955 ns/op 54.724 ns/op 1.00
Return object 10000 times 0.26980 ns/op 0.32800 ns/op 0.82
Throw Error 10000 times 4.3596 us/op 4.3721 us/op 1.00
fastMsgIdFn sha256 / 200 bytes 3.8220 us/op 3.7560 us/op 1.02
fastMsgIdFn h32 xxhash / 200 bytes 381.00 ns/op 360.00 ns/op 1.06
fastMsgIdFn h64 xxhash / 200 bytes 437.00 ns/op 410.00 ns/op 1.07
fastMsgIdFn sha256 / 1000 bytes 12.586 us/op 11.960 us/op 1.05
fastMsgIdFn h32 xxhash / 1000 bytes 518.00 ns/op 511.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 520.00 ns/op 509.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 115.29 us/op 111.16 us/op 1.04
fastMsgIdFn h32 xxhash / 10000 bytes 2.2380 us/op 2.0920 us/op 1.07
fastMsgIdFn h64 xxhash / 10000 bytes 1.5180 us/op 1.4170 us/op 1.07
enrSubnets - fastDeserialize 64 bits 1.8980 us/op 1.5250 us/op 1.24
enrSubnets - ssz BitVector 64 bits 588.00 ns/op 518.00 ns/op 1.14
enrSubnets - fastDeserialize 4 bits 250.00 ns/op 212.00 ns/op 1.18
enrSubnets - ssz BitVector 4 bits 585.00 ns/op 566.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 131.51 us/op 122.82 us/op 1.07
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 153.89 us/op 150.43 us/op 1.02
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 230.94 us/op 208.12 us/op 1.11
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 378.82 us/op 346.09 us/op 1.09
prioritizePeers score 0:0 att 64-1 sync 4-1 433.09 us/op 377.69 us/op 1.15
array of 16000 items push then shift 1.7288 us/op 1.6054 us/op 1.08
LinkedList of 16000 items push then shift 11.677 ns/op 9.0910 ns/op 1.28
array of 16000 items push then pop 72.358 ns/op 70.485 ns/op 1.03
LinkedList of 16000 items push then pop 10.025 ns/op 8.7340 ns/op 1.15
array of 24000 items push then shift 2.6212 us/op 2.4323 us/op 1.08
LinkedList of 24000 items push then shift 10.109 ns/op 8.8570 ns/op 1.14
array of 24000 items push then pop 133.54 ns/op 114.43 ns/op 1.17
LinkedList of 24000 items push then pop 9.3610 ns/op 8.8340 ns/op 1.06
intersect bitArray bitLen 8 7.4260 ns/op 6.9550 ns/op 1.07
intersect array and set length 8 87.009 ns/op 55.580 ns/op 1.57
intersect bitArray bitLen 128 35.371 ns/op 32.700 ns/op 1.08
intersect array and set length 128 1.0485 us/op 772.92 ns/op 1.36
bitArray.getTrueBitIndexes() bitLen 128 2.1420 us/op 1.4990 us/op 1.43
bitArray.getTrueBitIndexes() bitLen 248 3.3090 us/op 2.9460 us/op 1.12
bitArray.getTrueBitIndexes() bitLen 512 7.1750 us/op 5.1720 us/op 1.39
Buffer.concat 32 items 1.2550 us/op 962.00 ns/op 1.30
Uint8Array.set 32 items 2.3420 us/op 1.9920 us/op 1.18
transfer serialized Status (84 B) 2.1440 us/op 1.8290 us/op 1.17
copy serialized Status (84 B) 1.8010 us/op 1.6700 us/op 1.08
transfer serialized SignedVoluntaryExit (112 B) 2.2730 us/op 2.0780 us/op 1.09
copy serialized SignedVoluntaryExit (112 B) 1.9250 us/op 1.6920 us/op 1.14
transfer serialized ProposerSlashing (416 B) 2.6570 us/op 2.7560 us/op 0.96
copy serialized ProposerSlashing (416 B) 2.4420 us/op 2.5120 us/op 0.97
transfer serialized Attestation (485 B) 2.7050 us/op 2.7390 us/op 0.99
copy serialized Attestation (485 B) 2.5220 us/op 2.2870 us/op 1.10
transfer serialized AttesterSlashing (33232 B) 2.4710 us/op 2.2740 us/op 1.09
copy serialized AttesterSlashing (33232 B) 8.8350 us/op 4.8260 us/op 1.83
transfer serialized Small SignedBeaconBlock (128000 B) 3.8020 us/op 2.5260 us/op 1.51
copy serialized Small SignedBeaconBlock (128000 B) 23.698 us/op 12.366 us/op 1.92
transfer serialized Avg SignedBeaconBlock (200000 B) 4.1630 us/op 2.8570 us/op 1.46
copy serialized Avg SignedBeaconBlock (200000 B) 36.038 us/op 19.519 us/op 1.85
transfer serialized BlobsSidecar (524380 B) 4.2160 us/op 2.8950 us/op 1.46
copy serialized BlobsSidecar (524380 B) 112.99 us/op 91.118 us/op 1.24
transfer serialized Big SignedBeaconBlock (1000000 B) 4.6530 us/op 3.2770 us/op 1.42
copy serialized Big SignedBeaconBlock (1000000 B) 211.35 us/op 369.94 us/op 0.57
pass gossip attestations to forkchoice per slot 2.3628 ms/op 2.1756 ms/op 1.09
forkChoice updateHead vc 100000 bc 64 eq 0 2.5478 ms/op 2.5401 ms/op 1.00
forkChoice updateHead vc 600000 bc 64 eq 0 15.462 ms/op 14.091 ms/op 1.10
forkChoice updateHead vc 1000000 bc 64 eq 0 24.938 ms/op 23.416 ms/op 1.06
forkChoice updateHead vc 600000 bc 320 eq 0 20.724 ms/op 16.461 ms/op 1.26
forkChoice updateHead vc 600000 bc 1200 eq 0 95.085 ms/op 81.141 ms/op 1.17
forkChoice updateHead vc 600000 bc 64 eq 1000 24.109 ms/op 21.426 ms/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 10000 28.561 ms/op 24.077 ms/op 1.19
forkChoice updateHead vc 600000 bc 64 eq 300000 41.586 ms/op 30.173 ms/op 1.38
computeDeltas 3.3964 ms/op 2.8950 ms/op 1.17
computeProposerBoostScoreFromBalances 421.61 us/op 384.05 us/op 1.10
altair processAttestation - 250000 vs - 7PWei normalcase 3.4256 ms/op 2.3305 ms/op 1.47
altair processAttestation - 250000 vs - 7PWei worstcase 4.7972 ms/op 3.4848 ms/op 1.38
altair processAttestation - setStatus - 1/6 committees join 197.17 us/op 147.86 us/op 1.33
altair processAttestation - setStatus - 1/3 committees join 374.32 us/op 295.01 us/op 1.27
altair processAttestation - setStatus - 1/2 committees join 534.27 us/op 387.52 us/op 1.38
altair processAttestation - setStatus - 2/3 committees join 687.30 us/op 489.37 us/op 1.40
altair processAttestation - setStatus - 4/5 committees join 910.21 us/op 700.77 us/op 1.30
altair processAttestation - setStatus - 100% committees join 1.0557 ms/op 798.45 us/op 1.32
altair processBlock - 250000 vs - 7PWei normalcase 11.021 ms/op 9.4760 ms/op 1.16
altair processBlock - 250000 vs - 7PWei normalcase hashState 19.848 ms/op 17.205 ms/op 1.15
altair processBlock - 250000 vs - 7PWei worstcase 43.681 ms/op 38.310 ms/op 1.14
altair processBlock - 250000 vs - 7PWei worstcase hashState 67.379 ms/op 61.657 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei normalcase 3.2056 ms/op 2.5977 ms/op 1.23
phase0 processBlock - 250000 vs - 7PWei worstcase 35.787 ms/op 29.886 ms/op 1.20
altair processEth1Data - 250000 vs - 7PWei normalcase 784.85 us/op 471.45 us/op 1.66
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 24.930 us/op 15.906 us/op 1.57
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 54.799 us/op 68.578 us/op 0.80
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 22.383 us/op 20.693 us/op 1.08
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 24.437 us/op 13.919 us/op 1.76
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 169.94 us/op 171.90 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.6640 ms/op 1.2133 ms/op 1.37
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.9776 ms/op 1.6055 ms/op 1.23
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.3472 ms/op 1.6020 ms/op 1.47
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 5.1110 ms/op 3.8408 ms/op 1.33
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 3.7813 ms/op 2.6160 ms/op 1.45
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 6.9428 ms/op 5.7394 ms/op 1.21
Tree 40 250000 create 707.00 ms/op 343.17 ms/op 2.06
Tree 40 250000 get(125000) 251.06 ns/op 207.24 ns/op 1.21
Tree 40 250000 set(125000) 2.2815 us/op 978.59 ns/op 2.33
Tree 40 250000 toArray() 28.292 ms/op 22.270 ms/op 1.27
Tree 40 250000 iterate all - toArray() + loop 26.894 ms/op 21.071 ms/op 1.28
Tree 40 250000 iterate all - get(i) 82.377 ms/op 73.326 ms/op 1.12
MutableVector 250000 create 15.965 ms/op 13.587 ms/op 1.18
MutableVector 250000 get(125000) 7.4490 ns/op 6.7090 ns/op 1.11
MutableVector 250000 set(125000) 439.67 ns/op 291.69 ns/op 1.51
MutableVector 250000 toArray() 4.6818 ms/op 3.9193 ms/op 1.19
MutableVector 250000 iterate all - toArray() + loop 5.6291 ms/op 4.0987 ms/op 1.37
MutableVector 250000 iterate all - get(i) 1.7835 ms/op 1.5405 ms/op 1.16
Array 250000 create 4.9732 ms/op 3.8108 ms/op 1.31
Array 250000 clone - spread 2.6835 ms/op 1.2755 ms/op 2.10
Array 250000 get(125000) 1.7650 ns/op 0.63100 ns/op 2.80
Array 250000 set(125000) 2.0050 ns/op 0.71000 ns/op 2.82
Array 250000 iterate all - loop 135.22 us/op 85.370 us/op 1.58
effectiveBalanceIncrements clone Uint8Array 300000 56.438 us/op 37.756 us/op 1.49
effectiveBalanceIncrements clone MutableVector 300000 546.00 ns/op 385.00 ns/op 1.42
effectiveBalanceIncrements rw all Uint8Array 300000 209.32 us/op 178.89 us/op 1.17
effectiveBalanceIncrements rw all MutableVector 300000 144.03 ms/op 89.362 ms/op 1.61
phase0 afterProcessEpoch - 250000 vs - 7PWei 129.34 ms/op 119.70 ms/op 1.08
phase0 beforeProcessEpoch - 250000 vs - 7PWei 59.162 ms/op 35.416 ms/op 1.67
altair processEpoch - mainnet_e81889 432.38 ms/op 329.82 ms/op 1.31
mainnet_e81889 - altair beforeProcessEpoch 98.077 ms/op 55.663 ms/op 1.76
mainnet_e81889 - altair processJustificationAndFinalization 42.701 us/op 15.057 us/op 2.84
mainnet_e81889 - altair processInactivityUpdates 13.792 ms/op 6.9698 ms/op 1.98
mainnet_e81889 - altair processRewardsAndPenalties 99.151 ms/op 66.356 ms/op 1.49
mainnet_e81889 - altair processRegistryUpdates 7.4370 us/op 2.8270 us/op 2.63
mainnet_e81889 - altair processSlashings 1.7910 us/op 471.00 ns/op 3.80
mainnet_e81889 - altair processEth1DataReset 2.3380 us/op 595.00 ns/op 3.93
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.4715 ms/op 1.2876 ms/op 1.92
mainnet_e81889 - altair processSlashingsReset 10.290 us/op 3.3830 us/op 3.04
mainnet_e81889 - altair processRandaoMixesReset 13.417 us/op 4.6920 us/op 2.86
mainnet_e81889 - altair processHistoricalRootsUpdate 2.3120 us/op 836.00 ns/op 2.77
mainnet_e81889 - altair processParticipationFlagUpdates 6.3910 us/op 2.4670 us/op 2.59
mainnet_e81889 - altair processSyncCommitteeUpdates 2.4390 us/op 782.00 ns/op 3.12
mainnet_e81889 - altair afterProcessEpoch 157.49 ms/op 138.92 ms/op 1.13
phase0 processEpoch - mainnet_e58758 500.03 ms/op 385.92 ms/op 1.30
mainnet_e58758 - phase0 beforeProcessEpoch 217.40 ms/op 170.94 ms/op 1.27
mainnet_e58758 - phase0 processJustificationAndFinalization 31.983 us/op 23.622 us/op 1.35
mainnet_e58758 - phase0 processRewardsAndPenalties 78.966 ms/op 63.883 ms/op 1.24
mainnet_e58758 - phase0 processRegistryUpdates 33.712 us/op 13.306 us/op 2.53
mainnet_e58758 - phase0 processSlashings 2.2540 us/op 499.00 ns/op 4.52
mainnet_e58758 - phase0 processEth1DataReset 2.0120 us/op 428.00 ns/op 4.70
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.9245 ms/op 1.0421 ms/op 1.85
mainnet_e58758 - phase0 processSlashingsReset 9.3020 us/op 2.2190 us/op 4.19
mainnet_e58758 - phase0 processRandaoMixesReset 12.938 us/op 4.4140 us/op 2.93
mainnet_e58758 - phase0 processHistoricalRootsUpdate 1.4890 us/op 573.00 ns/op 2.60
mainnet_e58758 - phase0 processParticipationRecordUpdates 11.847 us/op 3.3730 us/op 3.51
mainnet_e58758 - phase0 afterProcessEpoch 127.12 ms/op 99.187 ms/op 1.28
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.5044 ms/op 1.2626 ms/op 1.19
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.3936 ms/op 1.4513 ms/op 1.65
altair processInactivityUpdates - 250000 normalcase 34.479 ms/op 29.753 ms/op 1.16
altair processInactivityUpdates - 250000 worstcase 35.650 ms/op 25.453 ms/op 1.40
phase0 processRegistryUpdates - 250000 normalcase 10.948 us/op 8.3860 us/op 1.31
phase0 processRegistryUpdates - 250000 badcase_full_deposits 432.86 us/op 361.05 us/op 1.20
phase0 processRegistryUpdates - 250000 worstcase 0.5 162.16 ms/op 134.79 ms/op 1.20
altair processRewardsAndPenalties - 250000 normalcase 78.776 ms/op 68.453 ms/op 1.15
altair processRewardsAndPenalties - 250000 worstcase 74.050 ms/op 64.208 ms/op 1.15
phase0 getAttestationDeltas - 250000 normalcase 10.673 ms/op 8.1418 ms/op 1.31
phase0 getAttestationDeltas - 250000 worstcase 10.581 ms/op 10.161 ms/op 1.04
phase0 processSlashings - 250000 worstcase 2.9907 ms/op 2.5000 ms/op 1.20
altair processSyncCommitteeUpdates - 250000 168.40 ms/op 158.14 ms/op 1.06
BeaconState.hashTreeRoot - No change 309.00 ns/op 290.00 ns/op 1.07
BeaconState.hashTreeRoot - 1 full validator 57.785 us/op 52.108 us/op 1.11
BeaconState.hashTreeRoot - 32 full validator 619.26 us/op 510.58 us/op 1.21
BeaconState.hashTreeRoot - 512 full validator 7.5337 ms/op 5.5212 ms/op 1.36
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 83.690 us/op 69.598 us/op 1.20
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0375 ms/op 883.67 us/op 1.17
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.807 ms/op 11.508 ms/op 1.29
BeaconState.hashTreeRoot - 1 balances 56.830 us/op 51.632 us/op 1.10
BeaconState.hashTreeRoot - 32 balances 523.87 us/op 452.54 us/op 1.16
BeaconState.hashTreeRoot - 512 balances 6.1862 ms/op 4.5167 ms/op 1.37
BeaconState.hashTreeRoot - 250000 balances 92.763 ms/op 79.732 ms/op 1.16
aggregationBits - 2048 els - zipIndexesInBitList 21.702 us/op 15.553 us/op 1.40
regular array get 100000 times 37.135 us/op 33.203 us/op 1.12
wrappedArray get 100000 times 36.887 us/op 33.096 us/op 1.11
arrayWithProxy get 100000 times 16.949 ms/op 14.791 ms/op 1.15
ssz.Root.equals 278.00 ns/op 245.00 ns/op 1.13
byteArrayEquals 261.00 ns/op 246.00 ns/op 1.06
shuffle list - 16384 els 7.5164 ms/op 7.0621 ms/op 1.06
shuffle list - 250000 els 113.09 ms/op 104.21 ms/op 1.09
processSlot - 1 slots 10.183 us/op 8.6240 us/op 1.18
processSlot - 32 slots 1.4858 ms/op 1.4047 ms/op 1.06
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 61.687 ms/op 64.180 ms/op 0.96
getCommitteeAssignments - req 1 vs - 250000 vc 2.6915 ms/op 2.6082 ms/op 1.03
getCommitteeAssignments - req 100 vs - 250000 vc 4.0539 ms/op 4.1122 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 4.3583 ms/op 4.4188 ms/op 0.99
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.8600 ns/op 5.8500 ns/op 1.00
state getBlockRootAtSlot - 250000 vs - 7PWei 906.89 ns/op 1.1727 us/op 0.77
computeProposers - vc 250000 10.611 ms/op 10.114 ms/op 1.05
computeEpochShuffling - vc 250000 114.11 ms/op 138.84 ms/op 0.82
getNextSyncCommittee - vc 250000 176.97 ms/op 180.45 ms/op 0.98
computeSigningRoot for AttestationData 15.891 us/op 16.154 us/op 0.98
hash AttestationData serialized data then Buffer.toString(base64) 2.5758 us/op 2.6268 us/op 0.98
toHexString serialized data 1.4172 us/op 1.8638 us/op 0.76
Buffer.toString(base64) 268.04 ns/op 323.46 ns/op 0.83

by benchmarkbot/action

@nflaig nflaig merged commit 7f19831 into unstable Jul 24, 2023
14 checks passed
@nflaig nflaig deleted the nflaig/eventstream-listen-socket branch July 24, 2023 11:56
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.10.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants