Sip.js: Fungsi UserAgent.stop() membutuhkan terlalu banyak waktu

Dibuat pada 6 Okt 2020  ·  7Komentar  ·  Sumber: onsip/SIP.js

Jelaskan bugnya
Untuk beberapa alasan saat menggunakan fungsi "UserAgent.stop()" dibutuhkan sekitar 30 detik untuk menghentikan semuanya hingga merespons dengan janji yang sesuai.

Apa yang saya coba capai adalah perintah unregister penuh, di mana ia tidak hanya membuat unregister tetapi juga:

  1. Menghapus semua langganan SIP.
  2. Menutup koneksi soket web.

Dari apa yang saya pahami, fungsi "stop()" melakukan hal itu. Hanya saja itu memakan waktu terlalu banyak.

Log
Berikut adalah log dari konsol: log

Perilaku yang diamati
Hanya setelah sekitar ~32 detik kita bisa melihat di: 15:14:05,797
Log berikut:
sip.subscribe-dialog | Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.
Hanya setelah log di atas itu membuang penerbit dan tingkat transportasi (WS).
Apa yang membuat saya berpikir bahwa itu mungkin terjadi sebagai akibat dari pesan BERLANGGANAN bahwa penghitung waktu kedaluwarsa, tetapi tidak sepenuhnya yakin.

Informasi Lingkungan

  • Kamailio 5.3.5 (Soket Web)
  • Google Chrome 85.0.4183.121

    • SIP.JS 0.17.1

bug

Komentar yang paling membantu

Saya memiliki masalah yang sama. Saya tidak punya langganan. Bagi saya, menutup WebSocket terlalu lama, (20-50 detik)

Saya mencoba:

  • menghancurkan objek secara manual seperti yang disarankan @slavikbialik .
  • menutup WebSocket secara manual dengan userAgent.transport.ws.close() untuk memastikan apakah masalah saya terkait dengan WebSocket.
  • di Chrome dan Firefox.

Saya tidak memiliki konfigurasi khusus, cukup ikuti panduan SIP.js untuk mereproduksi. Saya tidak tahu apakah ini membantu atau terkait dengan masalah saya, tetapi saya mencoba membuka WebSocket dengan protokol sip tanpa perpustakaan apa pun dan menutupnya. Mereka berdua bertahan di bawah 1 detik.

wss

Semua 7 komentar

Dikonfirmasi dalam kode ...

@john-e-riordan ini tampaknya menjadi masalah urutan operasi.

Di bagian atas user-agent.stop() kita bertransisi ke status Stopped .

Kami kemudian menelusuri registerers , sessions , lalu subscriptions .

Fungsi subscription.dispose() berhak mengirim SUBSCRIBE dengan header Expires=0 . Itu menyebabkan NOTIFY dikirim ke SIP.js yang menunjukkan bahwa langganan telah ditutup. Namun ada cek di user-agent.onTransportMessage() yang memeriksa apakah user-agent dihentikan. Dan kemudian menjatuhkan NOTIFY karena status agen pengguna. Menyebabkan pelanggan menunggu waktu habis.

Kami akan bekerja untuk mendapatkan patch ini. Terima kasih.

menyatakan bahwa langganan telah ditutup. Namun ada cek di user-agent.onTransportMessage() yang memeriksa apakah user-agent dihentikan. Dan kemudian menjatuhkan `NOTIFY karena

Terima kasih banyak telah merespons dengan cepat dan menemukan akar penyebab masalah! Semoga segera diperbaiki :)
Omong-omong, saya menguji fungsi stop() ketika saya tidak melakukan SIP SUBSCRIBE awal saya yang juga saya lakukan ketika membuat DAFTAR, dan semuanya bekerja dengan cepat. Tapi tentu saja saya membutuhkan SUBSCRIBE ini.
Terima kasih lagi!

Untuk mengatasinya, Anda dapat membuang langganan Anda secara manual sebelum memanggil stop() pada agen pengguna.

Untuk mengatasinya, Anda dapat membuang langganan Anda secara manual sebelum memanggil stop() pada agen pengguna.

Terima kasih! Sudah dilakukan, tetapi tidak dengan cara yang efisien menurut saya. Jika Anda dapat menyarankan saya cara yang lebih baik itu akan sangat membantu.
Saya memiliki beberapa langganan yang saya buat saat pengguna terdaftar (seperti kehadiran, konferensi, dan beberapa acara lainnya).
Apakah ada cara untuk mengulangi semua langganan aktif dan memanggil metode dispose atau unsubscribe ?
Saya melihat bahwa saya bisa mendapatkan daftar langganan dengan melakukan: userAgentObject._subscriptions dan mendapatkan beberapa array Pelanggan dan untuk beberapa alasan saya tidak dapat menerimanya dan melakukan apa pun dengannya, seperti iterasi atau yang lainnya.

Cara saya melakukannya saat ini, tetapi sekali lagi, saya tidak menyukainya, untuk setiap jenis acara berlangganan, saya menyimpan pelanggan ke dalam variabel global yang berbeda di kelas dan untuk setiap variabel pelanggan saya memanggil unsubscribe metode.

Omong-omong, apa perbedaan antara dispose dan unsubscribe ? Saya berasumsi bahwa dispose tidak akan berhenti berlangganan di PBX. Benar? Jika demikian, menurut saya itu kurang direkomendasikan, karena dalam kasus saya, jika saya tidak sepenuhnya berhenti berlangganan, PBX akan terus mengirimkan pesan NOTIFY yang tidak relevan ke Kamailio saya (yang dapat menyebabkan pemblokiran total karena Kamailio akan memblokir PBX saya jika itu terjadi). membebani dia).

Untuk mengatasinya, Anda dapat membuang langganan Anda secara manual sebelum memanggil stop() pada agen pengguna.

Ada kemajuan😊? Bagaimana melakukan ini sebelum bug diperbaiki?

Saya tidak berlangganan, tetapi UA.stop() juga sangat lambat. Hampir 1 menit...

Terima kasih.

Untuk mengatasinya, Anda dapat membuang langganan Anda secara manual sebelum memanggil stop() pada agen pengguna.

Ada kemajuan😊? Bagaimana melakukan ini sebelum bug diperbaiki?

Saya tidak berlangganan, tetapi UA.stop() juga sangat lambat. Hampir 1 menit...

Terima kasih.

Tidak, masalah ini belum terselesaikan.
Tapi, Anda bisa melakukan apa yang saya lakukan... Anda bisa menghancurkan objek Anda secara manual satu per satu dengan urutan logis berikut:

  1. subscriberObj.unsubscribe();
  2. register.unregister();
  3. userAgent.transport.disconnect();
  4. userAgent.stop();

Sebaiknya, lakukan setiap tindakan dengan janji. Maksud saya, gunakan then sehingga Anda dapat menunggu setiap tindakan berjanji untuk kembali dan bertindak sesuai untuk melakukan langkah berikutnya.

Saya memiliki masalah yang sama. Saya tidak punya langganan. Bagi saya, menutup WebSocket terlalu lama, (20-50 detik)

Saya mencoba:

  • menghancurkan objek secara manual seperti yang disarankan @slavikbialik .
  • menutup WebSocket secara manual dengan userAgent.transport.ws.close() untuk memastikan apakah masalah saya terkait dengan WebSocket.
  • di Chrome dan Firefox.

Saya tidak memiliki konfigurasi khusus, cukup ikuti panduan SIP.js untuk mereproduksi. Saya tidak tahu apakah ini membantu atau terkait dengan masalah saya, tetapi saya mencoba membuka WebSocket dengan protokol sip tanpa perpustakaan apa pun dan menutupnya. Mereka berdua bertahan di bawah 1 detik.

wss

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

tm1000 picture tm1000  ·  12Komentar

raphaelhovsepyan picture raphaelhovsepyan  ·  6Komentar

Pjata picture Pjata  ·  11Komentar

diegoteixeir4 picture diegoteixeir4  ·  5Komentar

Fzwael picture Fzwael  ·  5Komentar