मेरे पास एक एमएक्सशिप है जो एक एज़ूर आईओटी हब को डेटा भेजता है, वहां से मैं एज़ूर सिग्नल आर पर डिवाइस डेटा पोस्ट करने के लिए एज़ूर सिग्नलआर बाध्यकारी के साथ एक एज़ूर फ़ंक्शन का उपयोग कर रहा हूं। और मेरे पास एक कोणीय क्लाइंट है जो कॉल करके कनेक्शन जानकारी प्राप्त करेगा एज़्योर नेगोशिएट फंक्शन जिसे मैंने बनाया था, पैकेज @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}`);
});
});
}
}
क्या इस व्यवहार से छुटकारा पाने का कोई तरीका है?
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}`);
});
हाय इस त्रुटि को प्राप्त करने के लिए उसी दृष्टिकोण का उपयोग किया लेकिन जब मैंने इस दृष्टिकोण का उपयोग किया तो मेरा कनेक्शन इस दृष्टिकोण से शुरू नहीं हुआ। मैं अपने डीबगर को डीबग करता हूं कनेक्शन प्रारंभ पर नहीं जाता हूं यह मेरा कोड है
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;
});
कृपया जांचें कि मैं क्या गलत कर रहा हूं
संबंधित सवाल
नए सवाल
angular
Google से वेब फ्रेमवर्क के बारे में प्रश्न इस टैग का उपयोग कोणीय प्रश्नों के लिए करें जो एक व्यक्तिगत संस्करण के लिए विशिष्ट नहीं हैं। पुराने AngularJS (1.x) वेब ढांचे के लिए, कोणीयज टैग का उपयोग करें।