क्या कोई क्लाइंट किसी उल्का सर्वर से डिस्कनेक्ट करता है, या तो पृष्ठ से दूर ताज़ा या नेविगेट करके पता लगाने का कोई तरीका है, ताकि सर्वर कुछ क्लीनअप का प्रयास कर सके?क्लाइंट डिस्कनेक्ट होने के बाद सर्वर क्लीनअप
उत्तर
एक तकनीक "रखरखाव" विधि को लागू करने के लिए है जो प्रत्येक ग्राहक नियमित रूप से कॉल करता है। यह मानता है कि आपको प्रत्येक ग्राहक के Session
में user_id
मिला है।
// server code: heartbeat method
Meteor.methods({
keepalive: function (user_id) {
if (!Connections.findOne(user_id))
Connections.insert({user_id: user_id});
Connections.update(user_id, {$set: {last_seen: (new Date()).getTime()}});
}
});
// server code: clean up dead clients after 60 seconds
Meteor.setInterval(function() {
var now = (new Date()).getTime();
Connections.find({last_seen: {$lt: (now - 60 * 1000)}}).forEach(function (user) {
// do something here for each idle user
});
});
// client code: ping heartbeat every 5 seconds
Meteor.setInterval(function() {
Meteor.call('keepalive', Session.get('user_id'));
}, 5000);
आप प्रमाणीकरण आप विधि में उपयोगकर्ता की आईडी का उपयोग किया और कार्यों प्रकाशित उपयोग कर रहे हैं, तो आप अपने ट्रैकिंग लागू कर सकता है .. जैसे
Meteor.publish("messages", function(roomId) {
// assuming ActiveConnections is where you're tracking user connection activity
ActiveConnections.update({ userId: this.userId() }, {
$set:{ lastSeen: new Date().getTime() }
});
return Messages.find({ roomId: roomId});
});
मुझे लगता है कि बेहतर तरीके से सॉकेट पास घटना को पकड़ने के लिए समारोह प्रकाशित है: यदि आप एक "पिछली बार" जब उपयोगकर्ता स्विच रूम सेट कर सकते हैं।
Meteor.publish("your_collection", function() {
this.session.socket.on("close", function() { /*do your thing*/});
}
अद्यतन:
this._session.socket.on("close", function() { /*do your thing*/});
यह बढ़िया है। लेकिन फिर मैं स्पष्ट रूप से इस समस्या में भाग लेता हूं: http://stackoverflow.com/questions/10192938/meteor-code-must-always-run-within-a-fiber-when-calling-collection-insert-on-s – huyz
धन्यवाद । यह मेरे प्रश्न का उत्तर है: [उल्का हमेशा के लिए चल रहा है] (http://stackoverflow.com/q/12902392/599991) – zVictor
मैं उल्का 0.6.1 का उपयोग करता हूं और इस पंक्ति के लिए 'this.session.socket.on (" बंद करें ", फ़ंक्शन() {/ * अपनी बात करें * /}); 'मेरा सर्वर _Type त्रुटि देता है: अपरिभाषित_ की संपत्ति' सॉकेट 'नहीं पढ़ सकता है लेकिन जब मैं इसे' this._session.socket.on ("बंद करें" पर सही करता हूं, फ़ंक्शन() {/ * अपनी बात करें * /}); 'यह बहुत अच्छा काम करता है, धन्यवाद – fantom
मैं एक उल्का स्मार्ट पैकेज है कि विभिन्न सत्रों के सभी कनेक्ट किए गए सत्र ट्रैक और दोनों सत्र लॉगआउट का पता लगाता है क्रियान्वित किया है:
उल्का केनया संस्करण _SESSION इस तरह का उपयोग करता है और महंगे रखरखाव के बिना घटनाओं को डिस्कनेक्ट करें।
डिस्कनेक्ट/लॉगआउट घटनाओं का पता लगाने के लिए, आप केवल निम्न कर सकते हैं:
UserStatus.on "connectionLogout", (info) ->
console.log(info.userId + " with session " + info.connectionId + " logged out")
आप भी इसे प्रतिक्रिया के रूप में उपयोग कर सकते हैं। इसकी जांच - पड़ताल करें!
संपादित करें:v0.3.0
उपयोगकर्ता-स्थिति की स्थिति अब उपयोगकर्ताओं को निष्क्रिय भी ट्रैक करता है!
क्या यह प्रति पृष्ठ आधार पर किया जा सकता है और पूरे ऐप के माध्यम से नहीं? – Scalahansolo
हां, हालांकि यह अभी तक लागू नहीं किया गया है। एक सुविधा अनुरोध खोलें! –
मैं Iron Router का उपयोग कर रहा हूं और अपने मुख्य नियंत्रक के unload
ईवेंट पर अपना क्लीनअप कोड कॉल कर रहा हूं। निश्चित रूप से यह एक टैब बंद होने की घटना को पकड़ नहीं पाएगा, लेकिन अभी भी कई उपयोग मामलों के लिए पर्याप्त अच्छा लगता है
ApplicationController = RouteController.extend({
layoutTemplate: 'root',
data: {},
fastRender: true,
onBeforeAction: function() {
this.next();
},
unload: function() {
if(Meteor.userId())
Meteor.call('CleanUpTheUsersTrash');
},
action: function() {
console.log('this should be overridden by our actual controllers!');
}
});
- 1. क्लाइंट डिस्कनेक्ट
- 2. सॉकेट.ओओ - क्लाइंट-साइड डिस्कनेक्ट
- 3. क्लाइंट-सर्वर डिस्कनेक्ट के माध्यम से SQLConnection/Datasnap का प्रबंधन
- 4. WinRT StreamSocket डिस्कनेक्ट (दोनों सर्वर और क्लाइंट साइड) को संभालना
- 5. WCF क्लाइंट डिस्कनेक्ट कैसे करें
- 6. कीमिया वेबसाइट्स सर्वर - मैं जबरन क्लाइंट को डिस्कनेक्ट कैसे करूं?
- 7. वेब सेवाओं में क्लाइंट डिस्कनेक्ट का पता लगाने
- 8. कैसे एक नामित पाइप क्लाइंट/सर्वर का उपयोग कर एक ग्राहक डिस्कनेक्ट पता लगाने के लिए?
- 9. टाइमआउट के बाद ज़ीरोएमक्यू सॉकेट को डिस्कनेक्ट कैसे करें?
- 10. साइटकोर क्लीनअप एजेंट और डेटाबेस क्लीनअप
- 11. क्लाइंट सर्वर
- 12. डब्ल्यूसीएफ क्लाइंट डिस्कनेक्ट होने पर हम कैसे पता लगा सकते हैं?
- 13. एक सॉकेट डिस्कनेक्ट होने पर कैसे बताना है
- 14. डिस्कनेक्ट socket.io
- 15. नेटवर्क डिस्कनेक्ट होने के कारण अजाक्स कॉल विफलता का पता लगाने के लिए
- 16. global.asax का उपयोग करने और दायरे का उपयोग कैसे करें (आवेदन समाप्त होने के बाद फ़ाइल क्लीनअप के लिए)
- 17. टॉमकैट सर्वलेट में क्लाइंट डिस्कनेक्ट का पता लगाना?
- 18. क्लाइंट-सर्वर
- 19. 30 सेकंड के बाद समाप्त होने वाले ऐप्पल टीवी के लिए टीसीपी क्लाइंट या HttpWebRequest?
- 20. पायथन क्लाइंट/सर्वर प्रश्न
- 21. autoreconf क्लीनअप
- 22. कनेक्टिविटी में परिवर्तन होने पर सॉकेट डिस्कनेक्ट नहीं होता
- 23. डब्ल्यूसीएफ: सर्वर क्लाइंट-साइड का पता लगाने के लिए कैसे करें यदि सर्वर मुझे
- 24. क्लीनअप PHP सत्र फ़ाइलें
- 25. कोको क्लाइंट/सर्वर एप्लिकेशन
- 26. C# टीसीपी डिस्कनेक्ट
- 27. पृष्ठ लोड होने के बाद आंशिक प्रतिपादन
- 28. TortoiseSVN के लिए ऑटो-क्लीनअप
- 29. ReSharper - कोड क्लीनअप
- 30. DCOM: क्लाइंट क्रैश पर सर्वर में कनेक्शन कैसे बंद करें?
बहुत खोज के बाद मुझे लगता है कि यह अब के लिए सबसे अच्छा समाधान है। धन्यवाद!! – greggreg
यह लगभग छद्म कोड है, क्योंकि इसमें यह कार्यात्मक नहीं है: पहला सेट अंतराल में कोई अंतराल निर्दिष्ट नहीं है। इसके अलावा Connections.update कमांड {'user_id': user_id} को अद्यतन करने के लिए निर्दिष्ट नहीं है। अन्य त्रुटियां हो सकती हैं। हालांकि यह एक अच्छी शुरुआत है। –
@debergalis क्या यह अभी भी यह देखने का अनुशंसित तरीका है कि ग्राहक मर चुके हैं या नहीं? – user2602152