WebSockets
te में एक WebSocket वर्ग होता है जो HTअनुरोध की तरह कार्य करता है, लेकिन डेटा को वेबसॉकेट पर भेजने और प्राप्त करने की अनुमति देता है।
वेबसॉकेट
हस्ताक्षर: WebSocket(scope, receive=None, send=None)
te.websocसे आयात करें
Ac def ऐप (गुंजाइश, प्राप्त, भेजें):
वेबसॉकेट = वेबसॉकेट (गुंजाइश = गुंजाइश, प्राप्त = प्राप्त, भेजें = भेजें)
प्रतीक्षा करें websocket.()
वेबसोकेट का इंतजार करें। भेजें _ पाठ ('Hello, world!')
प्रतीक्षा करें websocket.()
एक मानचित्रण इंटरफ़ेस प्रदान करते हैं, ताकि आप उपयोग कर सकें scope उनका भी उपयोग करें।
उदाहरण के लिए,websocket['path'] ASGI पथ वापस कर देगा।
यूनिफ़ॉर्म रिसोर्स लोकेटर (जिसे आमतौर पर URL भी कहा जाता है)
के साथ वेबसॉकेट websocket.url एक यात्रा करें।
यह संपत्ति वास्तव में है str का एक उपवर्ग, और उन सभी घटकों को भी उजागर करता है जिन्हें से पार्स किया जा सकता है।
उदाहरण के लिए:websocket.url.path,websocket.url.port,websocket.url.scheme।
शीर्षक
हेडर को अपरिवर्तनीय, केस-असंवेदनशील बहु-शब्दकोशों के रूप में उजागर किया जाता है।
उदाहरण के लिए: websocket.headers['sec-websocket-version']
क्वेरी पैरामीटर
क्वेरी मापदंडों को अपरिवर्तनीय कई शब्दकोशों के रूप में उजागर किया जाता है।
उदाहरण के लिए: websocket.query_params['search']
पथ पैरामीटर
राउटर पथ मापदंडों को शब्दकोश इंटरफ़ेस के रूप में उजागर किया जाता है।
उदाहरण के लिए: websocket.path_params['username']
कनेक्शन स्वीकार करें
await websocket.accept(subprotocol=None, headers=None)
डेटा भेजें
await websocket.send_text(data)await websocket.send_bytes(data)await websocket.send_json(data)
0.10.0 संस्करण से, JSसंदेश डिफ़ॉल्ट रूप से पाठ डेटा फ़्रेम के रूप में भेजे जाते हैं। उपयोग करें websocket.send_json(data, mode="binary") JSको बाइनरी डेटा फ्रेम के माध्यम से भेजा जाता है।
डेटा प्राप्त करें
await websocket.receive_text()await websocket.receive_bytes()await websocket.receive_json()
पाठ "उठा सकता है starlette.websockets.WebSocketDisconnect() । "यह पारंपरिक शब्दार्थ अभिव्यक्ति के अनुरूप नहीं लगता है, जिससे सटीक चीनी अनुवाद करना मुश्किल हो जाता है। यदि आपके पास अधिक प्रासंगिक जानकारी है या पाठ सामग्री की सटीकता की पुष्टि करते हैं, तो मैं आपको प्रदान करने की पूरी कोशिश करूंगा। अधिक संतोषजनक अनुवाद। वर्तमान में, शाब्दिक अनुवाद के अनुसार, इसका केवल अनुवाद किया जा सकता है: "सुधार हो सकता है starlette.websockets.WebSocketDisconnect() "लेकिन यह अनुवाद व्यावहारिक नहीं हो सकता है।
0.10.0 संस्करण से, JSसंदेश डिफ़ॉल्ट रूप से पाठ डेटा फ़्रेम के रूप में प्राप्त होते हैं। उपयोग websocket.receive_json(data, mode="binary") बाइनरी डेटा फ्रेम के माध्यम से JSप्राप्त करें।
पुनरावृत्त डेटा
websocket.iter_text()websocket.iter_bytes()websocket.iter_json()
के साथ receive_text , receive_bytes और receive_json इसी तरह, लेकिन एक अतुल्यकालिक पुनरावृत्त लौटाता है।
te.websocसे आयात करें
Ac def ऐप (गुंजाइश, प्राप्त, भेजें):
वेबसॉकेट = वेबसॉकेट (गुंजाइश = गुंजाइश, प्राप्त = प्राप्त, भेजें = भेजें)
प्रतीक्षा करें websocket.()
वेबसोकेट में संदेश के लिए एसिंक। iter_text ():
प्रतीक्षा करें websocsend_text (f "संदेश पाठ था:{message}")
प्रतीक्षा करें websocket.()
जब starlette.websockets.WebSocketDisconnect जब पदोन्नत किया जाता है, तो पुनरावृत्त बाहर निकल जाता है।
कनेक्शन बंद करें
await websocket.close(code=1000, reason=None)
संदेश भेजें और प्राप्त करें
यदि आपको कच्चे ASGI संदेश भेजने या प्राप्त करने की आवश्यकता है, तो आपको उपयोग करना चाहिए websocket.send() और websocket.receive() मूल का उपयोग करने के बजाय send और receive कॉल करने योग्य वस्तु। यह सुनिश्चित करता है कि की स्थिति सही ढंग से अपडेट की गई है।
await websocket.send(message)await websocket.receive()
अस्वीकार प्रतिक्रिया भेजें
अगर आप बुला रहे हैं websocket.accept() पहले फोन किया गया websocket.close() सर्वर स्वचालित रूप से क्लाइंट साइड में HT403 त्रुटि भेजेगा।
यदि आप एक अलग त्रुटि प्रतिक्रिया भेजना चाहते हैं, तो आप उपयोग कर सकते हैं websocket.send_denial_response() विधि। यह एक प्रतिक्रिया भेजेगा और बाद में कनेक्शन बंद कर देगा।
await websocket.send_denial_response(response)
इसके लिए ASGI सर्वर को डेनियल रिस्पांस एक्सटेंशन का समर्थन करने की आवश्यकता होती है। यदि नहीं, तो यह उठाएगा RuntimeError त्रुटि।