Lewati ke isi

WebSockets

Starlette berisi kelas WebSocket yang berfungsi seperti permintaan HTTP, tetapi memungkinkan data di kirim dan diterima di WebSocket.

Soket Web

Tanda tangan: WebSocket(scope, receive=None, send=None)

Dari starlette.websockets mengimpor WebSockets


Async aplikasi def (lingkup, menerima, mengirim):
    WebSocket = WebSocket (scope = scope, accept = accept, send = send)
    Tunggu websocket.terima ()
    Tunggu websocket. kirim _ teks ('Halo, dunia!')
    Tunggu websocket.close ()

WebSockets menyediakan antarmuka pemetaan, sehingga Anda dapat menggunakannya seperti yang Anda lakukan dengan scope.

Misalnya,websocket['path'] akan mengembalikan jalur ASGI.

Uniform Resource Locators (juga biasa disebut sebagai URL)

URL WebSocket diakses sebagai websocket.url.

Atribut ini sebenarnya adalah subkelas dari str dan juga memaparkan semua komponen yang dapat diuraikan dari URL.

Misalnya:websocket.url.path,websocket.url.port,websocket.url.scheme.

gelar

Header diekspos sebagai multi-kamus yang tidak berubah dan peka huruf besar / kecil.

Misalnya: websocket.headers['sec-websocket-version']

parameter permintaan

Parameter kueri diekspos sebagai kamus ganda yang tidak dapat diubah.

Misalnya: websocket.query_params['search']

parameter jalur

Parameter jalur router diekspos sebagai antarmuka kamus.

Misalnya: websocket.path_params['username']

Terima koneksi

  • await websocket.accept(subprotocol=None, headers=None)

kirim data

  • await websocket.send_text(data)
  • await websocket.send_bytes(data)
  • await websocket.send_json(data)

Dari versi 0.10.0, pesan JSON di kirim secara default sebagai frame data teks. Gunakan websocket.send_json(data, mode="binary") untuk mengirim JSON sebagai frame data biner.

menerima data

  • await websocket.receive_text()
  • await websocket.receive_bytes()
  • await websocket.receive_json()

Teks "Dapat meningkatkan starlette.websockets.WebSocketDisconnect()." tampaknya tidak sesuai dengan ekspresi semantik konvensional, sehingga sulit untuk membuat terjemahan bahasa Mandarin yang akurat. Jika Anda memiliki lebih banyak informasi kontekstual atau mengkonfirmasi keakuratan konten teks, saya akan mencoba yang terbaik untuk memberi Anda terjemahan yang lebih memuaskan. Terjemahan literal saat ini hanya dapat diterjemahkan sebagai: "Dapat meningkatkan starlette.websockets.WebSocketDisconnect()." Tetapi terjemahan ini mungkin tidak praktis.

Dari versi 0.10.0, pesan JSON diterima secara default sebagai frame data teks. Gunakan websocket.receive_json(data, mode="binary") untuk menerima JSON sebagai frame data biner.

data iteratif

  • websocket.iter_text()
  • websocket.iter_bytes()
  • websocket.iter_json()

Mirip dengan receive_text,receive_bytes, dan receive_json, tetapi mengembalikan iterator asinkron.

Dari starlette.websockets mengimpor WebSockets


Async aplikasi def (lingkup, menerima, mengirim):
    WebSocket = WebSocket (scope = scope, accept = accept, send = send)
    Tunggu websocket.terima ()
    Sinkronisasi untuk pesan di websocket. iter _ text ():
        Tunggu websocket send _ text (f "Teks pesan adalah:{message}")
    Tunggu websocket.close ()

Ketika starlette.websockets.WebSocketDisconnect dipromosikan, iterator keluar.

Tutup koneksi

  • await websocket.close(code=1000, reason=None)

Kirim dan terima pesan

Jika Anda perlu mengirim atau menerima pesan ASGI mentah, Anda harus menggunakan websocket.send() dan websocket.receive() daripada callables send dan receive mentah. Ini akan memastikan bahwa status WebSocket diperbarui dengan benar.

  • await websocket.send(message)
  • await websocket.receive()

Kirim tanggapan penolakan

Jika Anda menelepon websocket.close() sebelum menelepon websocket.accept(), server akan secara otomatis mengirim kesalahan HTTP 403 ke sisi klien.

Jika Anda ingin mengirim respons kesalahan yang berbeda, Anda dapat menggunakan metode websocket.send_denial_response(). Ini akan mengirimkan tanggapan dan kemudian menutup koneksi.

  • await websocket.send_denial_response(response)

Ini membutuhkan server ASGI untuk mendukung ekstensi Respons Penolakan WebSocket. Jika tidak, kesalahan RuntimeError akan dilemparkan.