WebSocket
WebSocket स्क्रीन एक WebSocket क्लाइंट है: यह किसी सेवा से एक कनेक्शन खोलती है — उन हेडर और सबप्रोटोकॉल के साथ जिनकी सेवा अपेक्षा करती है — टेक्स्ट या बाइट भेजती है, और आने-जाने वाला हर संदेश सूचीबद्ध करती है, सबसे नया अंत में। किसी प्रयोग में इसे स्क्रिप्ट करने से पहले किसी लाइव API, कंट्रोल सरफ़ेस या WebSocket बोलने वाले डिवाइस को परखने के लिए इसका उपयोग करें।
कनेक्ट होना
- WebSocket खोलें।
- URL में पता टाइप करें:
ws://127.0.0.1:9001/याwss://example.com/socket। - अगर सेवा उन्हें माँगे, तो सबप्रोटोकॉल डालें और हेडर जोड़ें (टोकन वाला
Authorizationहेडर, कोई कुकी)। - कनेक्ट करें दबाएँ। जब तक upgrade चलता है बटन कनेक्ट हो रहा है… कहता है; पूरा होते ही फ़ील्ड लॉक हो जाते हैं और बटन डिस्कनेक्ट करें बन जाता है।
| फ़ील्ड | क्या | डिफ़ॉल्ट |
|---|---|---|
| URL | ws:// या wss://, होस्ट, वैकल्पिक पोर्ट (ws के लिए 80, wss के लिए 443) और पाथ | ws://127.0.0.1:9001/ |
| सबप्रोटोकॉल | पेश करने के सबप्रोटोकॉल, कॉमा से अलग, पसंद के क्रम में; सर्वर एक चुनता है। नाम में स्पेस, कॉमा या स्लैश नहीं होते। | कोई नहीं |
| हेडर | upgrade रिक्वेस्ट के लिए अतिरिक्त हेडर; + हेडर एक पंक्ति जोड़ता है। नाम के बिना पंक्ति छोड़ दी जाती है। | कोई नहीं |
कनेक्ट होने — नाम की खोज, TCP कनेक्शन, wss:// के लिए TLS और upgrade — के लिए 10 सेकंड हैं। URL स्क्रीन बदलने पर और ऐप फिर से शुरू करने पर भी बना रहता है; हेडर और सबप्रोटोकॉल नहीं।
कनेक्ट होने पर, पैनल दिखाता है:
| मद | क्या |
|---|---|
| स्थिति | खुला, या समाप्त होने पर: आपने या सर्वर ने बंद किया, क्लोज़ कोड के साथ, या टूट गया जब लाइन बिना क्लोज़ के टूट गई |
| कारण | बंद करने वाले पक्ष ने जो कारण दिया, अगर कोई हो |
| सबप्रोटोकॉल | सर्वर ने जो सबप्रोटोकॉल चुना, या — |
| पीयर | सर्वर का IP:port |
| अपग्रेड | कनेक्ट होने और upgrade में कितना समय लगा, मिलीसेकंड में |
कनेक्शन एक जॉब है: यह कंसोल पट्टी में दिखता है और वहाँ से भी रोका जा सकता है।
सुरक्षित कनेक्शन
wss:// उन्हीं प्रमाणपत्रों पर भरोसा करता है जिन पर इस सिस्टम पर HTTPS करता है: जिस सर्वर का प्रमाणपत्र यह सिस्टम नहीं मानता (स्व-हस्ताक्षरित, समाप्त, दूसरा नाम) उसे "A secure connection to … could not be made" के साथ अस्वीकार कर दिया जाता है। जाँच छोड़ने का कोई सेटिंग नहीं है।
संदेश भेजना
- संदेश के नीचे, टेक्स्ट या बाइनरी (hex) चुनें।
- संदेश लिखें। बाइनरी के लिए, बाइट को hex अंकों के जोड़ों में लिखें:
de ad be ef। - भेजें दबाएँ, या संदेश के फ़ील्ड में Ctrl+Enter दबाएँ।
संदेश अधिकतम 16 MiB (16 777 216 बाइट, बाइनरी के लिए बाइट के रूप में गिना जाता है, hex अंकों के रूप में नहीं) होता है, वही सीमा जो आने वाले संदेश और WebSocket भेजें चरण के लिए है। अधिक लंबा संदेश कुछ भी भेजे जाने से पहले Too long: at most 16777216 के साथ अस्वीकार कर दिया जाता है, और कनेक्शन खुला रहता है।
जब कोई टेक्स्ट संदेश JSON हो, तो JSON फ़ॉर्मेट करें उसे भेजने से पहले इंडेंट के साथ सजाता है। संदेश स्क्रीन बदलने पर और ऐप फिर से शुरू करने पर भी बना रहता है।
संदेश पढ़ना
संदेश वह सूचीबद्ध करता है जो प्राप्त हुआ (↓) और भेजा गया (↑), सबसे नया अंत में, समय, संदेश की शुरुआत (300 अक्षर) और उसके आकार के साथ; बाइनरी संदेश अपने बाइट hex में दिखाता है और बाइनरी से चिह्नित होता है। सूची के ऊपर है कि कितने प्राप्त और भेजे गए। सूची अंत तक स्क्रॉल रहते नए संदेशों का पीछा करती है; ऊपर स्क्रॉल करें तो वह वहीं रुक जाती है जहाँ आप हैं।
सूची के नीचे किसी संदेश को पूरा देखने के लिए उस पर क्लिक करें: JSON सजा हुआ, बाइनरी hex में। संदेश के रूप में संपादित करें उसे संदेश फ़ील्ड में कॉपी करता है, फिर भेजने या बदलने के लिए। बहुत लंबा संदेश आंशिक रूप से दिखाया जाता है — टेक्स्ट 64 KiB तक, बाइनरी 4096 बाइट तक — और तब कॉपी नहीं किया जा सकता, क्योंकि वह कटा हुआ भेजा जाता।
स्क्रीन नवीनतम 2000 संदेश रखती है; साफ़ करें सूची ख़ाली कर देता है। अगर कोई सेवा स्क्रीन जितना ले सकती है उससे तेज़ भेजे — दसवें सेकंड में 2000 से अधिक — तो उनमें से सबसे पुराने सूची से छोड़ दिए जाते हैं और "not shown" के रूप में गिने जाते हैं। कैप्चर चालू रहते इंस्पेक्टर के पास वे अब भी होते हैं।
बंद करना
डिस्कनेक्ट करें कोड 1000 (सामान्य) के साथ एक close फ़्रेम भेजता है और फ़ोन काटने से पहले सर्वर के जवाब के लिए 2 सेकंड तक प्रतीक्षा करता है। तब स्थिति 1000 के साथ बंद पढ़ी जाती है। जब सर्वर बंद करता है, तो स्थिति उसका कोड और कारण दिखाती है; जब कनेक्शन बिना close फ़्रेम के टूटता है, तो वह टूट गया पढ़ी जाती है और कंसोल कारण बताता है।
Signal Lab सर्वर के pings का जवाब ख़ुद देता है; pings और pongs सूचीबद्ध नहीं होते। कनेक्शन तब भी समाप्त होता है जब 16 MiB से बड़ा संदेश आता है, या जब सर्वर के पढ़ना बंद कर देने के कारण कोई संदेश भेजने में 10 सेकंड से अधिक लगते हैं। (16 MiB से बड़ा ख़ुद भेजना अस्वीकार कर दिया जाता है और कुछ समाप्त नहीं होता।)
इंस्पेक्टर में
कैप्चर चालू रहते, कनेक्शन का ट्रैफ़िक प्रोटोकॉल ws और स्रोत websocket के साथ दिखता है:
| सारांश | क्या |
|---|---|
CONNECT ws://… (subprotocol) | कनेक्शन खोला गया |
TEXT … | एक टेक्स्ट संदेश और उसकी शुरुआत |
BINARY n B … | एक बाइनरी संदेश, उसका आकार और पहले 16 बाइट |
CLOSE code reason | एक close फ़्रेम, भेजा या प्राप्त |
हर संदेश फ़्रेम अपने बाइट रखता है। जब ट्रैफ़िक हल्का हो हर संदेश कैप्चर होता है; व्यस्त कनेक्शन सेकंड में 200 फ़्रेम तक रोका जाता है, और अगला कैप्चर किया गया फ़्रेम बताता है कि कितने छोड़े गए (+n not shown)। देखें इंस्पेक्टर।
प्रयोगों में
चार चरण एक WebSocket बातचीत स्क्रिप्ट करते हैं। कनेक्शन एक चरण खोलता है और बाकी उसे नाम से पुकारते हैं:
| चरण | क्या करता है |
|---|---|
| WebSocket कनेक्ट | बाकी रन के लिए एक कनेक्शन खोलता है। इसका URL और हेडर {{templates}} लेते हैं, इसलिए पहले निकाला गया टोकन उनमें जा सकता है। विवरण |
| WebSocket भेजें | किसी कनेक्शन पर टेक्स्ट या बाइनरी संदेश भेजता है। विवरण |
| WebSocket की प्रतीक्षा | ऐसे संदेश की प्रतीक्षा करता है जिसका पेलोड मेल खाता हो, जैसे UDP की प्रतीक्षा करता है; JSON संदेश बाद में फ़ील्ड दर फ़ील्ड पढ़े जा सकते हैं। विवरण |
| WebSocket बंद करें | close handshake के साथ कनेक्शन बंद करता है: कोड 1000, या किसी अनुप्रयोग के अपने के लिए 3000–4999, और अधिकतम 123 बाइट का कारण। विवरण |
रन समाप्त होने पर — या रोके जाने पर — उसका जो कनेक्शन अब भी खुला है, वह ठीक से बंद कर दिया जाता है। WebSocket इको टेम्पलेट एक पूरा उदाहरण है।
कमांड लाइन से
signallab send ws एक आदान-प्रदान करता है: कनेक्ट, एक संदेश भेजें, अगर आप माँगें तो जवाब की प्रतीक्षा करें, बंद करें।
signallab send ws ws://127.0.0.1:9001/ --text '{"type":"ping"}' --expect ponghandshake और जो भेजा गया वह standard error पर जाता है, जवाब standard output पर:
Connected to ws://127.0.0.1:9001/ in 4 ms
Sent 15 bytes
{"type":"pong"}--hex एक बाइनरी संदेश भेजता है; -H एक हेडर जोड़ता है और --protocol एक सबप्रोटोकॉल पेश करता है (दोनों दोहराए जा सकते हैं)। --expect TEXT, --expect-regex RE या --wait (कोई भी संदेश) बताते हैं कि किस जवाब की प्रतीक्षा करनी है, --timeout मिलीसेकंड तक (डिफ़ॉल्ट 2000)। यह 1 के साथ निकलता है जब जवाब नहीं आता या कनेक्शन विफल होता है। देखें कमांड लाइन।
समस्याएँ
| जो आप देखते हैं | सामान्य कारण |
|---|---|
… is not a WebSocket address | URL ws:// या wss:// से शुरू नहीं होता, या उसमें होस्ट नहीं है। |
… answered HTTP n instead of switching to WebSocket | सर्वर ने upgrade अस्वीकार कर दिया: ग़लत पाथ (404), ग़ायब या ग़लत टोकन (401, 403)। उसके जवाब की शुरुआत तकनीकी विवरण के नीचे है। |
… did not take any of the subprotocols offered | आपने सबप्रोटोकॉल पेश किए और सर्वर ने उनमें से कोई नहीं चुना, या उसने ऐसा जवाब दिया जो आपने पेश नहीं किया। |
… is not a subprotocol name | स्पेस, कॉमा या स्लैश वाला नाम। |
The header … cannot be sent with the upgrade | ऐसा हेडर नाम या मान जिसमें HTTP की अनुमति नहीं देता वर्ण हों। |
… refused the connection | उस पोर्ट पर कुछ नहीं सुनता। |
A secure connection to … could not be made | प्रमाणपत्र यहाँ भरोसेमंद नहीं है, या TLS विफल हुआ। देखें सुरक्षित कनेक्शन। |
The connection with … broke: the server did not keep to the WebSocket protocol | सर्वर ने कुछ ऐसा भेजा जो मान्य WebSocket नहीं है। |
A WebSocket message is limited to … bytes | सर्वर ने 16 MiB से बड़ा संदेश भेजा, जो कनेक्शन समाप्त कर देता है। |
Too long: at most 16777216 | जो संदेश आपने भेजने की कोशिश की वह 16 MiB से बड़ा है। कुछ नहीं भेजा गया; कनेक्शन खुला है। |
हर त्रुटि संदेश त्रुटि संदेश में सूचीबद्ध है।