मेरे पास कोड है जो बाहरी वेबसॉकेट एपीआई से जुड़ता है, जो निम्नानुसार दिखता है:

const WebSocket = require('ws')

const ws = new WebSocket('wss://example.com/')

const connectExternalAPI() => {
    ws.onopen = () => { ws.send(JSON.stringify('example': 'message')) }

    ws.onerror = (event) => { console.error(event) }

    ws.onmessage = (event) => { console.log(event.data) }

    ws.onclose = (event) => {
        console.error(event)
        setTimeout(connectExternalAPI, 10000)
    }
}

चूंकि मैं पहले से ही हर बार कनेक्शन को onclose मिलने पर एपीआई से फिर से कनेक्ट करने का प्रयास करता हूं, कनेक्शन ड्रॉप का पता लगाने के लिए ping-pong को अतिरिक्त रूप से लागू करने की आवश्यकता क्या है (और फिर से कनेक्ट करने का प्रयास करें) जब यह पहले से ही एक ही काम पूरा करता है ?

क्या ऐसी परिस्थितियां हैं जिनमें onclose ट्रिगर नहीं होता, भले ही कनेक्शन गिर गया हो?

1
philosopher 22 अक्टूबर 2020, 15:46

1 उत्तर

सबसे बढ़िया उत्तर

यदि कनेक्शन स्पष्ट रूप से बंद है, तो आपको लगभग तुरंत एक onclose मिल जाएगा, लेकिन यदि कनेक्शन टूट गया है, उदाहरण के लिए, जब आप ईथरनेट केबल को डिस्कनेक्ट करते हैं, तो onclose प्राप्त करने में कुछ समय लगेगा, शायद इससे पहले टीसीपी कनेक्टिविटी के नुकसान का पता नहीं लगाता है। आपकी सेटिंग के आधार पर इसमें कई मिनट लग सकते हैं।

वैसे यह पिंग/पोंग होना जरूरी नहीं है; सर्वर द्वारा भेजा गया और ब्राउज़र में प्राप्त और संसाधित किया गया दिल की धड़कन कभी-कभी लागू करना आसान होता है।

1
ocrdu 22 अक्टूबर 2020, 18:05