gmg137 / netease-cloud-music-gtk

Linux 平台下基于 Rust + GTK 开发的网易云音乐播放器
GNU General Public License v3.0
1.51k stars 89 forks source link

Single isahc and log ncmapi #201

Closed catsout closed 1 year ago

catsout commented 1 year ago

From https://docs.rs/isahc/latest/isahc/struct.HttpClient.html

The client maintains a connection pool internally and is not cheap to create, so we recommend creating a client once and re-using it throughout your code. Creating a new client for every request would decrease performance significantly, and might cause errors to occur under high workloads, caused by creating too many system resources like sockets or threads.

Fix hangs when do many requests(download image).

Too many sokets:

├── 0 -> /dev/pts/4
├── 1 -> /dev/pts/4
├── 10 -> anon_inode:[eventfd]
├── 100 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 101 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 102 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 103 -> socket:[3394533]
├── 104 -> socket:[3394487]
├── 105 -> socket:[3396743]
├── 106 -> socket:[3396101]
├── 107 -> socket:[3396744]
├── 108 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 109 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 11 -> socket:[3388116]
├── 110 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 111 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 112 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 113 -> socket:[3395210]
├── 114 -> socket:[3396747]
├── 115 -> socket:[3394414]
├── 116 -> socket:[3394436]
├── 117 -> socket:[3396745]
├── 118 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 119 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 12 -> anon_inode:[eventfd]
├── 120 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 121 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 122 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 123 -> anon_inode:[eventpoll]
├── 124 -> anon_inode:[eventfd]
├── 125 -> anon_inode:[timerfd]
├── 126 -> socket:[3395995]
├── 127 -> socket:[3395996]
├── 128 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 129 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 13 -> socket:[29152]
├── 130 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 131 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 132 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 133 -> anon_inode:[eventpoll]
├── 134 -> anon_inode:[eventfd]
├── 135 -> anon_inode:[timerfd]
├── 136 -> socket:[3393526]
├── 137 -> socket:[3393527]
├── 138 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 139 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 14 -> socket:[29153]
├── 140 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 141 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 142 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 143 -> anon_inode:[eventpoll]
├── 144 -> anon_inode:[eventfd]
├── 145 -> anon_inode:[timerfd]
├── 146 -> socket:[3394365]
├── 147 -> socket:[3394366]
├── 148 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 149 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 15 -> anon_inode:inotify
├── 150 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 151 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 152 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 153 -> socket:[3396748]
├── 154 -> socket:[3396048]
├── 155 -> socket:[3396112]
├── 156 -> socket:[3396749]
├── 157 -> socket:[3396751]
├── 16 -> socket:[3388117]
├── 17 -> /memfd:wayland-cursor (deleted)
├── 178 -> socket:[3395360]
├── 179 -> socket:[3396750]
├── 18 -> anon_inode:[eventfd]
├── 180 -> socket:[3396753]
├── 181 -> socket:[3396752]
├── 182 -> socket:[3396058]
├── 183 -> anon_inode:[eventpoll]
├── 184 -> anon_inode:[eventfd]
├── 185 -> anon_inode:[timerfd]
├── 186 -> socket:[3395997]
├── 187 -> socket:[3395998]
├── 188 -> socket:[3396755]
├── 189 -> socket:[3396740]
├── 19 -> socket:[3390782]
├── 190 -> socket:[3396746]
├── 191 -> socket:[3394456]
├── 192 -> socket:[3396758]
├── 198 -> socket:[3396119]
├── 199 -> socket:[3396123]
├── 2 -> /dev/pts/4
├── 20 -> socket:[3390783]
├── 200 -> socket:[3396049]
├── 201 -> socket:[3396756]
├── 202 -> socket:[3396054]
├── 203 -> anon_inode:[eventpoll]
├── 204 -> anon_inode:[eventfd]
├── 205 -> anon_inode:[timerfd]
├── 206 -> socket:[3394367]
├── 207 -> socket:[3394368]
├── 21 -> socket:[3388869]
├── 218 -> socket:[3396754]
├── 219 -> socket:[3396067]
├── 22 -> socket:[3388870]
├── 220 -> socket:[3396063]
├── 221 -> socket:[3396757]
├── 222 -> socket:[3394525]
├── 223 -> anon_inode:[eventpoll]
├── 224 -> anon_inode:[eventfd]
├── 225 -> anon_inode:[timerfd]
├── 226 -> socket:[3393528]
├── 227 -> socket:[3393529]
├── 228 -> anon_inode:[eventpoll]
├── 229 -> anon_inode:[eventfd]
├── 23 -> socket:[3390784]
├── 230 -> anon_inode:[timerfd]
├── 231 -> socket:[3395999]
├── 232 -> socket:[3396000]
├── 238 -> anon_inode:[eventpoll]
├── 239 -> anon_inode:[eventfd]
├── 24 -> socket:[3394474]
├── 240 -> anon_inode:[timerfd]
├── 241 -> socket:[3393530]
├── 242 -> socket:[3393531]
├── 25 -> /dev/dri/renderD128
├── 253 -> anon_inode:[eventpoll]
├── 254 -> anon_inode:[eventfd]
├── 255 -> anon_inode:[timerfd]
├── 256 -> socket:[3394369]
├── 257 -> socket:[3394370]
├── 26 -> /dev/dri/renderD128
├── 27 -> /dev/dri/renderD128
├── 28 -> /dev/dri/renderD128
├── 288 -> anon_inode:[eventpoll]
├── 289 -> anon_inode:[eventfd]
├── 29 -> /dev/dri/renderD128
├── 290 -> anon_inode:[timerfd]
├── 291 -> socket:[3396001]
├── 292 -> socket:[3396002]
├── 294 -> anon_inode:[eventpoll]
├── 295 -> anon_inode:[eventfd]
├── 296 -> anon_inode:[timerfd]
├── 3 -> anon_inode:[eventfd]
├── 30 -> socket:[3390790]
├── 31 -> socket:[3394475]
├── 310 -> socket:[3393532]
├── 314 -> socket:[3393533]
├── 315 -> anon_inode:[eventpoll]
├── 316 -> anon_inode:[eventfd]
├── 32 -> socket:[3395217]
├── 320 -> anon_inode:[timerfd]
├── 323 -> socket:[3394371]
├── 324 -> socket:[3394372]
├── 327 -> anon_inode:[eventpoll]
├── 33 -> socket:[3394409]
├── 330 -> anon_inode:[eventfd]
├── 332 -> anon_inode:[timerfd]
├── 334 -> socket:[3393534]
├── 335 -> socket:[3393535]
├── 336 -> anon_inode:[eventpoll]
├── 337 -> anon_inode:[eventfd]
├── 34 -> socket:[3396091]
├── 340 -> anon_inode:[timerfd]
├── 342 -> socket:[3396003]
├── 343 -> socket:[3396004]
├── 344 -> anon_inode:[eventpoll]
├── 345 -> anon_inode:[eventfd]
├── 347 -> anon_inode:[timerfd]
├── 348 -> socket:[3396005]
├── 349 -> socket:[3396006]
├── 35 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 350 -> anon_inode:[eventpoll]
├── 354 -> anon_inode:[eventfd]
├── 355 -> anon_inode:[timerfd]
├── 356 -> socket:[3394373]
├── 357 -> socket:[3394374]
├── 358 -> anon_inode:[eventpoll]
├── 36 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 360 -> anon_inode:[eventfd]
├── 361 -> anon_inode:[timerfd]
├── 362 -> socket:[3393536]
├── 363 -> socket:[3396609]
├── 364 -> anon_inode:[eventpoll]
├── 365 -> anon_inode:[eventfd]
├── 366 -> anon_inode:[timerfd]
├── 367 -> socket:[3396007]
├── 368 -> socket:[3396008]
├── 369 -> anon_inode:[eventpoll]
├── 37 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 370 -> anon_inode:[eventfd]
├── 371 -> anon_inode:[timerfd]
├── 372 -> socket:[3396610]
├── 373 -> socket:[3396611]
├── 374 -> anon_inode:[eventpoll]
├── 375 -> anon_inode:[eventfd]
├── 376 -> anon_inode:[timerfd]
├── 377 -> socket:[3396009]
├── 378 -> socket:[3396010]
├── 379 -> anon_inode:[eventpoll]
├── 38 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 380 -> anon_inode:[eventfd]
├── 381 -> anon_inode:[timerfd]
├── 382 -> socket:[3396612]
├── 383 -> socket:[3396613]
├── 384 -> anon_inode:[eventpoll]
├── 385 -> anon_inode:[eventfd]
├── 386 -> anon_inode:[timerfd]
├── 387 -> socket:[3396614]
├── 388 -> socket:[3396615]
├── 389 -> anon_inode:[eventpoll]
├── 39 -> /memfd:pulseaudio (deleted)
├── 390 -> anon_inode:[eventfd]
├── 391 -> anon_inode:[timerfd]
├── 392 -> socket:[3396616]
├── 393 -> socket:[3396617]
├── 394 -> anon_inode:[eventpoll]
├── 395 -> anon_inode:[eventfd]
├── 396 -> anon_inode:[timerfd]
├── 397 -> socket:[3396618]
├── 398 -> socket:[3396619]
├── 399 -> anon_inode:[eventpoll]
├── 4 -> socket:[29091]
├── 40 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 400 -> anon_inode:[eventfd]
├── 401 -> anon_inode:[timerfd]
├── 402 -> socket:[3396620]
├── 403 -> socket:[3396621]
├── 404 -> anon_inode:[eventpoll]
├── 405 -> anon_inode:[eventfd]
├── 406 -> anon_inode:[timerfd]
├── 407 -> socket:[3396622]
├── 408 -> socket:[3396623]
├── 409 -> anon_inode:[eventpoll]
├── 41 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 410 -> anon_inode:[eventfd]
├── 411 -> anon_inode:[timerfd]
├── 412 -> socket:[3396624]
├── 413 -> socket:[3396625]
├── 414 -> anon_inode:[eventpoll]
├── 415 -> anon_inode:[eventfd]
├── 416 -> anon_inode:[timerfd]
├── 417 -> socket:[3396626]
├── 418 -> socket:[3396627]
├── 419 -> anon_inode:[eventpoll]
├── 42 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 420 -> anon_inode:[eventfd]
├── 421 -> anon_inode:[timerfd]
├── 422 -> socket:[3396628]
├── 423 -> socket:[3396629]
├── 424 -> anon_inode:[eventpoll]
├── 425 -> anon_inode:[eventfd]
├── 426 -> anon_inode:[timerfd]
├── 427 -> socket:[3396630]
├── 428 -> socket:[3396631]
├── 429 -> anon_inode:[eventpoll]
├── 43 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 430 -> anon_inode:[eventfd]
├── 431 -> anon_inode:[timerfd]
├── 432 -> socket:[3396632]
├── 433 -> socket:[3396633]
├── 434 -> anon_inode:[eventpoll]
├── 435 -> anon_inode:[eventfd]
├── 436 -> anon_inode:[timerfd]
├── 437 -> socket:[3396634]
├── 438 -> socket:[3396635]
├── 439 -> anon_inode:[eventpoll]
├── 44 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 440 -> anon_inode:[eventfd]
├── 441 -> anon_inode:[timerfd]
├── 442 -> socket:[3396636]
├── 443 -> socket:[3396637]
├── 444 -> anon_inode:[eventpoll]
├── 445 -> anon_inode:[eventfd]
├── 446 -> anon_inode:[timerfd]
├── 447 -> socket:[3396638]
├── 448 -> socket:[3396639]
├── 449 -> anon_inode:[eventpoll]
├── 45 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 450 -> anon_inode:[eventfd]
├── 451 -> anon_inode:[timerfd]
├── 452 -> socket:[3396640]
├── 453 -> socket:[3396641]
├── 454 -> anon_inode:[eventpoll]
├── 455 -> anon_inode:[eventfd]
├── 456 -> anon_inode:[timerfd]
├── 457 -> socket:[3396642]
├── 458 -> socket:[3396643]
├── 459 -> anon_inode:[eventpoll]
├── 46 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 460 -> anon_inode:[eventfd]
├── 461 -> anon_inode:[timerfd]
├── 462 -> socket:[3396644]
├── 463 -> socket:[3396645]
├── 464 -> anon_inode:[eventpoll]
├── 465 -> anon_inode:[eventfd]
├── 466 -> anon_inode:[timerfd]
├── 467 -> socket:[3396646]
├── 468 -> socket:[3396647]
├── 469 -> anon_inode:[eventpoll]
├── 47 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 470 -> anon_inode:[eventfd]
├── 471 -> anon_inode:[timerfd]
├── 472 -> socket:[3396648]
├── 473 -> socket:[3396649]
├── 474 -> anon_inode:[eventpoll]
├── 475 -> anon_inode:[eventfd]
├── 476 -> anon_inode:[timerfd]
├── 477 -> socket:[3396650]
├── 478 -> socket:[3396651]
├── 479 -> anon_inode:[eventpoll]
├── 48 -> socket:[29212]
├── 480 -> anon_inode:[eventfd]
├── 481 -> anon_inode:[timerfd]
├── 482 -> socket:[3396652]
├── 483 -> socket:[3396653]
├── 484 -> anon_inode:[eventpoll]
├── 485 -> anon_inode:[eventfd]
├── 486 -> anon_inode:[timerfd]
├── 487 -> socket:[3396654]
├── 488 -> socket:[3396655]
├── 489 -> anon_inode:[eventpoll]
├── 49 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 490 -> anon_inode:[eventfd]
├── 491 -> anon_inode:[timerfd]
├── 492 -> socket:[3396656]
├── 493 -> socket:[3396657]
├── 494 -> anon_inode:[eventpoll]
├── 495 -> anon_inode:[eventfd]
├── 496 -> anon_inode:[timerfd]
├── 497 -> socket:[3396658]
├── 498 -> socket:[3396659]
├── 5 -> socket:[29092]
├── 50 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 51 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 52 -> socket:[29214]
├── 53 -> socket:[3396742]
├── 54 -> socket:[3394476]
├── 55 -> socket:[3396089]
├── 56 -> socket:[3396741]
├── 57 -> socket:[3396076]
├── 58 -> anon_inode:[eventpoll]
├── 59 -> anon_inode:[eventfd]
├── 6 -> /run/user/1000/wayland-0.lock
├── 60 -> anon_inode:[timerfd]
├── 61 -> socket:[3393522]
├── 62 -> socket:[3393523]
├── 63 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 64 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 65 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 66 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 67 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
├── 68 -> anon_inode:[eventpoll]
├── 69 -> anon_inode:[eventfd]
├── 7 -> socket:[29093]
├── 70 -> anon_inode:[timerfd]
├── 71 -> socket:[3395991]
├── 72 -> socket:[3395992]
├── 73 -> anon_inode:[eventpoll]
├── 74 -> anon_inode:[eventfd]
├── 75 -> anon_inode:[timerfd]
├── 76 -> socket:[3394361]
├── 77 -> socket:[3394362]
├── 78 -> anon_inode:[eventpoll]
├── 79 -> anon_inode:[eventfd]
├── 8 -> socket:[29095]
├── 80 -> anon_inode:[timerfd]
├── 81 -> socket:[3393524]
├── 82 -> socket:[3393525]
├── 83 -> anon_inode:[eventpoll]
├── 84 -> anon_inode:[eventfd]
├── 85 -> anon_inode:[timerfd]
├── 86 -> socket:[3395993]
├── 87 -> socket:[3395994]
├── 88 -> socket:[3394447]
├── 89 -> socket:[3396043]
├── 9 -> socket:[29096]
├── 90 -> socket:[3396090]
├── 91 -> socket:[3394529]
├── 92 -> socket:[3396105]
├── 93 -> anon_inode:[eventpoll]
├── 94 -> anon_inode:[eventfd]
├── 95 -> anon_inode:[timerfd]
├── 96 -> socket:[3394363]
├── 97 -> socket:[3394364]
├── 98 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
└── 99 -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
catsout commented 1 year ago

Desktop applications have a fd limit of 1024, which can be easily reached if we have one isahc client per request.

catsout commented 1 year ago

Need https://github.com/gmg137/netease-cloud-music-api/pull/4