सॉकेट.मिट () बनाम सॉकेट.सेंड ()


133

इन दोनों में क्या अंतर है?

मैंने देखा है कि अगर मैं से बदल socket.emitकरने के लिए socket.sendएक काम कर कार्यक्रम में, सर्वर संदेश प्राप्त करने के लिए, हालांकि मैं क्यों समझ में नहीं आता विफल रहा है।

मैंने यह भी देखा कि मेरे कार्यक्रम में अगर मैं से बदल socket.emitगया socket.send, तो सर्वर को एक संदेश मिलता है, लेकिन यह कई बार प्राप्त होता है। जब मैं console.log()यह देखने के लिए उपयोग करता हूं कि सर्वर ने क्या प्राप्त किया है, तो यह मेरे द्वारा उपयोग किए जाने पर कुछ अलग दिखाता है socket.emit

यह व्यवहार क्यों? आप कैसे जानते हैं कि कब उपयोग करना है socket.emitया नहीं socket.send?

जवाबों:


123

सॉकेट के साथ। आप इस तरह से कस्टम इवेंट रजिस्टर कर सकते हैं:

सर्वर:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

ग्राहक:

var socket = io.connect('http://localhost');
socket.on('news', function (data) {
  console.log(data);
  socket.emit('my other event', { my: 'data' });
});

सॉकेट.सेंड वही करता है, लेकिन आप 'समाचार' पर पंजीकरण नहीं करते हैं, लेकिन संदेश के लिए:

सर्वर:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.send('hi');
});

ग्राहक:

var socket = io.connect('http://localhost');
socket.on('message', function (message) {
  console.log(message);
});

3
यह एक बहुत बड़ा अंतर नहीं लगता है। यह सॉकेट की तरह दिखता है ।emit () सब कुछ कर सकता है जो सॉकेट.ऑन () कर सकता है। उन्हें वह कार्य क्यों करना पड़ा?
नोड निंजा

2
मुझे नहीं पता, मैंने स्रोत कोड की जाँच की और वे लगभग समान हैं ( github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L318 )। शायद यह ऐतिहासिक है और सिर्फ पीछे की संगतता के लिए है।
चार्ल्स

37
इस पोस्ट के भविष्य के पाठकों को भी अवगत कराएं, कि यह socket.io के बारे में है, न कि नोड.जेएस टीसीपी, यूडीपी या यूनिक्स जेब के बारे में।
aredridel

3
क्या वेनिला जावास्क्रिप्ट वेबसोकेट के साथ उत्सर्जन करना संभव है?
एलेक्स बुज़निक

11
ऐसा लगता है socket.sendकि बस के लिए एक उपनाम हैsocket.emit('message', message);
मोहित गैंग्रेड

92

सरल और सटीक (स्रोत: Socket.IO गूगल समूह ):

socket.emit आपको सर्वर और क्लाइंट पर कस्टम ईवेंट को खाली करने की अनुमति देता है

socket.sendसंदेश भेजते हैं जो 'message'ईवेंट के साथ प्राप्त होते हैं


45

टी एल; डॉ:

socket.send(data, callback) अनिवार्य रूप से कॉलिंग के बराबर है socket.emit('message', JSON.stringify(data), callback)

स्रोत कोड को देखे बिना, मैं मानूंगा कि भेजें फ़ंक्शन अधिक कुशल संपादन है: स्ट्रिंग संदेश भेजने के लिए, कम से कम ?

तो, हाँ मूल रूप से फेंकना आप वस्तुओं को भेजने के लिए है, जो बहुत आसान है की अनुमति देता है।

इस उदाहरण को साथ लें socket.emit:

sendMessage: function(type, message) {
    socket.emit('message', {
        type: type,
        message: message
    });
}

और घर पर स्कोर रखने वालों के लिए, यहाँ इसका उपयोग करने जैसा दिखता है socket.send:

sendMessage: function(type, message) {
    socket.send(JSON.stringify({
        type: type,
        message: message
    }));
}

27

socket.sendवैनिला वेबसॉफ्ट इंटरफेस के साथ संगतता के लिए लागू किया गया है। socket.emitकेवल सॉकेट की सुविधा है। वे दोनों ऐसा ही करते हैं, लेकिन socket.emitसंदेशों को संभालने में थोड़ा अधिक सुविधाजनक है।


socket.emit Socket.IO तक ही सीमित नहीं है बल्कि नेट पर भी काम करता है।
अजय

0

बुनियादी दो तरह से संचार प्रणालियों में, सॉकेट.माइट (व्यक्तिगत अनुभव) का उपयोग करने के लिए अधिक ठोस और आसान साबित हुआ है और सॉकेट का एक हिस्सा है। यह मुख्य रूप से ऐसे उद्देश्यों के लिए बनाया गया है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.