socket.emit () বনাম socket.send ()


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
এটি খুব বড় পার্থক্যের মতো বলে মনে হচ্ছে না। এটি দেখে যে সকেট.ইমিট () সকেট.অন () যা করতে পারে তা করতে পারে। তাদের কেন তাদের এই কাজটি করতে হয়েছিল?
নোড নিনজা

2
আমি জানি না, আমি উত্স কোডটি যাচাই করেছি এবং তারা প্রায় একই ( github.com/LearnBoost/sket.io/blob/master/lib/sket.js#L318 ) তৈরি করে। সম্ভবত এটি historicalতিহাসিক এবং কেবল পিছনের সামঞ্জস্যের জন্য।
চার্লস

37
এই পোস্টের ভবিষ্যতের পাঠকগণও সচেতন হোন, এটি সকেট.ইও সম্পর্কিত, নোড.জেএসসিপি, ইউডিপি বা ইউনিক্স সকেট নয়।
aredridel

3
ভ্যানিলা জাভাস্ক্রিপ্ট ওয়েবসাইটসকেট দিয়ে কি নির্গত করা সম্ভব?
অ্যালেক্স বুজনিক

11
দেখে মনে হচ্ছে socket.sendএটি কেবলমাত্র একটি উপনামsocket.emit('message', message);
মোহিত গঙ্গারাদ

92

সহজ এবং নির্ভুল (উত্স: সকেট.আইও গুগল গ্রুপ ):

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শুধুমাত্র সকেটের বৈশিষ্ট্য I তারা উভয়ই একই কাজ করে তবে socket.emitবার্তা পরিচালনার ক্ষেত্রে এটি আরও কিছুটা সুবিধাজনক।


সকেট.ইমিট সকেট.আইও-তে সীমাবদ্ধ নয় তবে নেটতেও কাজ করে।
অজয়

0

প্রাথমিক দুটি উপায়ে যোগাযোগ ব্যবস্থাগুলিতে, সকেট.ইমিট আরও দৃinc়প্রত্যয়ী এবং সহজেই ব্যবহারযোগ্য (ব্যক্তিগত অভিজ্ঞতা) হিসাবে প্রমাণিত হয়েছে এবং এটি সকেট.আইওর একটি অংশ যা মূলত এই ধরনের উদ্দেশ্যে নির্মিত which


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.