websocket-client adalah klien WebSocket untuk Python. Ini menyediakan akses ke API tingkat rendah untuk WebSockets. websocket-client mengimplementasikan versi hybi-13 dari protokol WebSocket. Klien ini saat ini tidak mendukung ekstensi permessage-deflate dari RFC 7692.
Dokumentasi proyek ini dapat ditemukan di https://websocket-client.readthedocs.io/
Silakan lihat pedoman kontribusi
Anda dapat menggunakan pip install websocket-client
untuk menginstal, atau pip install -e .
untuk menginstal dari salinan kode lokal. Modul ini diuji pada Python 3.9+.
Ada beberapa dependensi opsional yang dapat diinstal untuk mengaktifkan fitur klien websocket tertentu.
python-socks
untuk penggunaan proxy dan wsaccel
untuk sedikit peningkatan kinerja, gunakan: pip install websocket-client[optional]
websockets
untuk menjalankan pengujian unit menggunakan server gema lokal, gunakan: pip install websocket-client[test]
Sphinx
dan sphinx_rtd_theme
untuk membuat dokumentasi proyek, gunakan: pip install websocket-client[docs]
Meskipun bukan ketergantungan yang ketat, rel berguna saat menggunakan run_forever
dengan koneksi ulang otomatis. Instal rel dengan pip install rel
.
Catatan Kaki: Beberapa shell, seperti zsh, mengharuskan Anda untuk keluar dari karakter [
dan ]
dengan .
Lihat FAQ dokumentasi untuk pedoman tambahan: https://websocket-client.readthedocs.io/en/latest/faq.html
Masalah yang diketahui dengan perpustakaan ini termasuk kurangnya dukungan Kompresi WebSocket (RFC 7692) dan dokumentasi/dukungan threading yang minimal.
Metode send
dan validate_utf8
terkadang bisa menjadi hambatan. Anda dapat menonaktifkan validasi UTF8 di perpustakaan ini (dan menerima peningkatan kinerja) dengan parameter skip_utf8_validation
. Jika Anda ingin mendapatkan performa yang lebih baik, instal wsaccel. Meskipun websocket-client tidak bergantung pada wsaccel, ini akan digunakan jika tersedia. wsaccel menggandakan kecepatan validasi UTF8 dan menawarkan sedikit peningkatan kinerja sebesar 10% saat menutupi data payload sebagai bagian dari proses send
. Numpy dulunya merupakan alternatif peningkatan kinerja yang disarankan, namun edisi #687 ternyata tidak membantu.
Banyak lagi contoh yang dapat ditemukan di dokumentasi contoh.
Sebagian besar situasi WebSockets di dunia nyata melibatkan koneksi yang berumur lebih panjang. Loop run_forever
WebSocketApp akan secara otomatis mencoba menyambung kembali ke koneksi WebSocket yang terbuka ketika koneksi jaringan terputus jika dilengkapi dengan:
dispatcher
(petugas operator async seperti rel atau pyevent)reconnect
yang bukan nol (penundaan antara pemutusan dan upaya penyambungan kembali) run_forever
menyediakan berbagai kontrol koneksi berbasis peristiwa menggunakan callback seperti on_message
dan on_error
. run_forever
tidak secara otomatis menyambung kembali jika server menutup WebSocket dengan baik (mengembalikan kode penutupan websocket standar). Inilah logika di balik keputusan tersebut. Menyesuaikan perilaku ketika server menutup WebSocket harus ditangani dalam panggilan balik on_close
. Contoh ini menggunakan rel bagi petugas operator untuk menyediakan koneksi ulang otomatis.
import websocket
import _thread
import time
import rel
def on_message ( ws , message ):
print ( message )
def on_error ( ws , error ):
print ( error )
def on_close ( ws , close_status_code , close_msg ):
print ( "### closed ###" )
def on_open ( ws ):
print ( "Opened connection" )
if __name__ == "__main__" :
websocket . enableTrace ( True )
ws = websocket . WebSocketApp ( "wss://api.gemini.com/v1/marketdata/BTCUSD" ,
on_open = on_open ,
on_message = on_message ,
on_error = on_error ,
on_close = on_close )
ws . run_forever ( dispatcher = rel , reconnect = 5 ) # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
rel . signal ( 2 , rel . abort ) # Keyboard Interrupt
rel . dispatch ()
Ini jika Anda ingin menyampaikan pesan singkat dan segera memutuskan sambungan setelah selesai. Misalnya, jika Anda ingin mengonfirmasi bahwa server WebSocket berjalan dan merespons permintaan tertentu dengan benar.
from websocket import create_connection
ws = create_connection ( "ws://echo.websocket.events/" )
print ( ws . recv ())
print ( "Sending 'Hello, World'..." )
ws . send ( "Hello, World" )
print ( "Sent" )
print ( "Receiving..." )
result = ws . recv ()
print ( "Received '%s'" % result )
ws . close ()