मेरे पास एक एमएक्सशिप है जो एक एज़ूर आईओटी हब को डेटा भेजता है, वहां से मैं एज़ूर सिग्नल आर पर डिवाइस डेटा पोस्ट करने के लिए एज़ूर सिग्नलआर बाध्यकारी के साथ एक एज़ूर फ़ंक्शन का उपयोग कर रहा हूं। और मेरे पास एक कोणीय क्लाइंट है जो कॉल करके कनेक्शन जानकारी प्राप्त करेगा एज़्योर नेगोशिएट फंक्शन जिसे मैंने बनाया था, पैकेज @aspnet/signalr का उपयोग करके।

लेकिन समस्या यह है कि मेरा कोणीय क्लाइंट हर कुछ सेकंड में एक त्रुटि फेंक रहा है, और जब मैं जांचता हूं, तो मैं समझ सकता हूं कि hubConnection.onclose घटना हर कुछ सेकंड में सक्रिय हो रही है।

नीचे मेरी कोणीय सेवा कोड है।

export class SignalRService {
    mxChipData: Subject < string > = new Subject();
    private hubConnection: SignalR.HubConnection;

    constructor(private http: HttpClient) {}

    private getSignalRConnection(): Observable < SignalRConnection > {
        return this.http.get < SignalRConnection > (`${environment.baseUrl}negotiate`);
    }

    init() {
        this.getSignalRConnection().subscribe(con => {
            const options = {
                accessTokenFactory: () => con.accessToken
            };

            this.hubConnection = new SignalR.HubConnectionBuilder()
                .withUrl(con.url, options)
                .configureLogging(SignalR.LogLevel.Information)
                .build();

            this.hubConnection.on('notify', data => {
                this.mxChipData.next(data);
            });

            this.hubConnection.start()
                .catch(error => console.error(error));

            this.hubConnection.onclose((error) => {
                console.error(`Something went wrong: ${error}`);
            });
        });
    }
}

क्या इस व्यवहार से छुटकारा पाने का कोई तरीका है?

0
Sibeesh Venu 2 जिंदा 2019, 18:33

2 जवाब

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

मैंने एक आसान फिक्स निकाला। SignalR.HubConnection में serverTimeoutInMilliseconds और keepAliveIntervalInMilliseconds गुण हैं।

serverTimeoutInMilliseconds

सर्वर टाइमआउट मिलीसेकंड में।

यदि यह टाइमआउट सर्वर से कोई संदेश प्राप्त किए बिना समाप्त हो जाता है, तो कनेक्शन एक त्रुटि के साथ समाप्त कर दिया जाएगा। डिफ़ॉल्ट टाइमआउट मान 30,000 मिलीसेकंड (30 सेकंड) है।

keepAliveIntervalInMilliseconds

डिफ़ॉल्ट अंतराल जिस पर सर्वर को पिंग करना है।

डिफ़ॉल्ट मान 15,000 मिलीसेकंड (15 सेकंड) है। सर्वर को हार्ड डिस्कनेक्ट का पता लगाने की अनुमति देता है (जैसे जब कोई क्लाइंट अपने कंप्यूटर को अनप्लग करता है)।

मैंने अभी इन मानों को अधिक से अधिक संख्या में सेट किया है।

this.hubConnection.serverTimeoutInMilliseconds = 300000;
this.hubConnection.keepAliveIntervalInMilliseconds = 300000;

हम अस्थायी सुधार के रूप में onclose ईवेंट में हब को फिर से शुरू कर सकते हैं।

this.hubConnection.onclose((error) => {
    this.hubConnection.start();
    console.error(`Something went wrong: ${error}`);
});
2
Sibeesh Venu 2 जिंदा 2019, 18:33

हाय इस त्रुटि को प्राप्त करने के लिए उसी दृष्टिकोण का उपयोग किया लेकिन जब मैंने इस दृष्टिकोण का उपयोग किया तो मेरा कनेक्शन इस दृष्टिकोण से शुरू नहीं हुआ। मैं अपने डीबगर को डीबग करता हूं कनेक्शन प्रारंभ पर नहीं जाता हूं यह मेरा कोड है

connection.serverTimeoutInMilliseconds = 300000;
connection.keepAliveIntervalInMilliseconds = 300000;

connection.onclose((error) => {
    connection.start({ transport: 'longPolling' }, function () {
        console.log('connection started!');
    });
    console.error(`Something went wrong: ${error}`);

});

connection.on("iotMessage", function (messageFromIoTDevice) {
    document.getElementById("message").innerHTML = messageFromIoTDevice;
});

कृपया जांचें कि मैं क्या गलत कर रहा हूं

0
Rajan 17 अप्रैल 2020, 15:02