Socket.io: Client.disconnect () क्लाइंट को डिस्कनेक्ट करने के लिए बाध्य करने के लिए

को निर्मित 8 सित॰ 2010  ·  24टिप्पणियाँ  ·  स्रोत: socketio/socket.io

क्लाइंट इंस्टेंस पर डिस्कनेक्ट() विधि होना बहुत अच्छा होगा। यह आईआरसी के किक/प्रतिबंध जैसे तंत्र को लागू करने के लिए उपयोगी है। मूल रूप से दुर्व्यवहार करने वालों से छुटकारा पाने का एक तरीका होना चाहिए।

सबसे उपयोगी टिप्पणी

socket.disconnect(); सही ढंग से काम नहीं करता है, निश्चित रूप से यह डिस्कनेक्ट घटना को ट्रिगर करता है, लेकिन यह सचमुच कनेक्शन को बंद नहीं करता है। क्या कोई बग है या यह व्यवहार अपेक्षित है?

सभी 24 टिप्पणियाँ

यह चर्चा करना दिलचस्प हो सकता है कि क्या यह लागू करने लायक है (हालांकि यह कम प्राथमिकता होगी)। हालांकि, आईआरसी किक/बैन एक उदाहरण है जहां मैं ऐसी कार्यक्षमता का उपयोग नहीं करूंगा। उन परिदृश्यों में यह क्लाइंट को कनेक्टेड रखना चाहता है, और केवल एक विशिष्ट चैनल के संदेशों के प्रसारण को रोकना चाहता है।

इसी तरह की विधि पर विचार करते समय यह मिला।

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

धन्यवाद!

यह वास्तव में बहुत उपयोगी होगा।

क्या client.connection.destroy() क्लाइंट को डिस्कनेक्ट करने का एक वैध तरीका है?

प्लस1. एक ग्राहक को सफाई से डिस्कनेक्ट करने का एक तरीका पसंद करेंगे। :)

क्लाइंट._ऑनडिस्कनेक्ट (); या
सॉकेट.क्लाइंट्स [किक्डयूसर सॉकेट आईडी] ._ऑनडिस्कनेक्ट ();

चालबाजी करते नजर आते हैं।

नोट: "ऑनडिस्कनेक्ट" से पहले एक अंडरस्कोर है, यह सिर्फ इस मार्कडाउन में प्रस्तुत नहीं करता है।

यह भी देखा कि कोई ऐसा करता है (हालांकि इसे स्वयं परीक्षण नहीं किया है):
सॉकेट.क्लाइंट्स [किकड क्लाइंट आईडी]। भेजें ({इवेंट: 'डिस्कनेक्ट'});
सॉकेट.क्लाइंट्स [किकड क्लाइंट आईडी]। कनेक्शन। एंड ();

क्या इसे अभी लागू किया गया है, या मुझे - विधि का उपयोग करना चाहिए

सॉकेट.क्लाइंट्स [किकड क्लाइंट आईडी]। भेजें ({इवेंट: 'डिस्कनेक्ट'});
सॉकेट.क्लाइंट्स [किकड क्लाइंट आईडी]। कनेक्शन। एंड ();

ऐसा करने का "आधिकारिक" तरीका क्या है ????

कृपया फिर से खोलें ताकि हमें पता चले कि आधिकारिक तरीका क्या है।

इसका अभी भी कोई समाधान नहीं है, कृपया प्रगति को ट्रैक करने के लिए फिर से खोलें।

मैंने अभी इस कोड को क्लाइंट/सॉकेट.जेएस में खोजा है:

/**
 * Kicks client
 *
 * <strong i="6">@api</strong> public
 */

Socket.prototype.disconnect = function () {
  if (!this.disconnected) {
    this.log.info('booting client');

    if ('' === this.namespace.name) {
      if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
        this.manager.transports[this.id].onForcedDisconnect();
      } else {
        this.manager.onClientDisconnect(this.id);
        this.manager.store.publish('disconnect:' + this.id);
      }
    } else {
      this.packet({type: 'disconnect'});
      this.manager.onLeave(this.id, this.namespace.name);
      this.$emit('disconnect', 'booted');
    }

  }

  return this;
};

मैंने इसे आजमाया ( socket.disconnect() ) और यह ठीक काम करता है। ऐसा लगता है कि यह कोड 2011 के मध्य से है और हमें किसी ने नहीं बताया।

#795 अंक भी देखें।

socket.disconnect(); सही ढंग से काम नहीं करता है, निश्चित रूप से यह डिस्कनेक्ट घटना को ट्रिगर करता है, लेकिन यह सचमुच कनेक्शन को बंद नहीं करता है। क्या कोई बग है या यह व्यवहार अपेक्षित है?

@geniousphp मुझे एक ही समस्या हो रही है

तो समस्या क्यों बंद है, क्या यह हल हो गया है? यदि हां, तो कैसे? निष्कर्ष क्या है?

मुझे नहीं पता कि यह क्यों बंद है, यह मेरे लिए काम नहीं करता है और मैं अभी भी वियोग को मजबूर करने के लिए बदसूरत तरीके का उपयोग करता हूं।

प्रयत्न,
सॉकेट.मैनेजर.ऑनक्लाइंटडिस्कनेक्ट (सॉकेट.आईडी);

मुझे लगता है कि मैं यही चाहता हूं। बहुत बढ़िया।

दुर्भाग्य से @acidhax 1.0 रिलीज के बाद से उनकी विधि अब और काम नहीं करती है

वहाँ वैसे भी है कि 0.9.16 से 1.XX को सुचारू रूप से अपग्रेड करें, दोस्तों?

+1

यहाँ वही नाव। परीक्षण के लिए यह वास्तव में महत्वपूर्ण है क्योंकि आप परीक्षणों को एक दूसरे से अलग करना चाहते हैं।

    try {
        IO.Options opts = new IO.Options();
        opts.forceNew = true;
        opts.timeout = -1;
        socket1 = IO.socket(c.ip, opts);
        socket1.on("res", getdataListener);
        socket1.connect();
                socket1.on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT,
                new Emitter.Listener() {

                    <strong i="5">@Override</strong>
                    public void call(Object... args) {

                        Logger.print("CONNECTED...............");

                        Message msg = new Message();
                        msg.what = ResponseCodes.CreateQueueResp;
                        Login.handler.sendMessage(msg);

                        activity.runOnUiThread(new Runnable() {

                            <strong i="6">@Override</strong>
                            public void run() {
                                // TODO Auto-generated method stub

                                startChecking();
                                startIdleChecking();

                            }

                        }); 
                    }

                })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_RECONNECT,
                        new Emitter.Listener() {

                            <strong i="7">@Override</strong>
                            public void call(Object... arg0) {


                                System.out
                                        .println("............... EVENT_RECONNECT");

                                // TODO Auto-generated method stub

                            }
                        })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT_ERROR,
                        new Emitter.Listener() {

                            <strong i="8">@Override</strong>
                            public void call(Object... args) {

                                System.out
                                        .println("............... EVENT_CONNECT_ERROR");

                            }

                        })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT_TIMEOUT,
                        new Emitter.Listener() {

                            <strong i="9">@Override</strong>
                            public void call(Object... args) {

                                System.out
                                        .println("............... EVENT_CONNECT_TIMEOUT");

                            }

                            // this is the emit from the server
                        })

                .on(Socket.EVENT_ERROR, new Emitter.Listener() {

                    <strong i="10">@Override</strong>
                    public void call(Object... args) {

                        System.out
                                .println("......................... EVENT_ERROR");

                    }

                    // this is the emit from the server

                })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT,
                        new Emitter.Listener() {

                            <strong i="11">@Override</strong>
                            public void call(Object... args) {

                                Logger.print(".............EVENT_DISCONNECT");


                                if (!open) {

                                    //server_message = getResources().getString(R.string.It_seems_that);


                                    server_message="It seems that connection to server have been Lost.Please reconnect!"; 

                                    ServerError error = new ServerError(activity, server_message);


                                }

                            }

                        });

    } catch (Exception e) {

        e.printStackTrace();

    }

जब डिवाइस संदेश प्राप्त करता है तो मेरा फ़ंक्शन ऐप बार-बार ट्रिगर होता है। हर बार मेरा फंक्शन ऐप सॉकेट कनेक्शन खुला। खुले हुए कनेक्शन को जबरन बंद कैसे करें।
यहाँ मेरा तर्क है:
'सख्त उपयोग';
var _test = आवश्यकता ('सॉकेट.आईओ-क्लाइंट');
वर सॉकेट = _test.connect ('http://XXXXXXXXXX.net/');
निर्यात। हैंडलर = फ़ंक्शन (घटना, संदर्भ) {
var ResultMessage = JSON.stringify (event.message,null,2);
अगर (! सॉकेट। कनेक्टेड)
{
सॉकेट.एमिट ('उपयोगकर्ता जोड़ें', '1542');
}
सॉकेट.एमिट ('नया संदेश', "[" + परिणाम संदेश + "]");

};
धन्यवाद,
अग्रिम रूप से।

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स