সকেট.আইও 1.0 তে একটি নির্দিষ্ট আইডিতে বার্তা প্রেরণ


85

আমি একটি নির্দিষ্ট সকেট আইডিতে ডেটা প্রেরণ করতে চাই।

আমরা পুরানো সংস্করণগুলিতে এটি করতে সক্ষম হব:

io.sockets.socket(socketid).emit('message', 'for your eyes only');

আমি সকেট.আইও 1.0 তে অনুরূপ কিছু করতে কীভাবে যাব?

উত্তর:


206

সকেট.ইও 1.0 এ তারা এর জন্য আরও ভাল উপায় সরবরাহ করে। প্রতিটি সকেট স্বয়ংক্রিয়ভাবে স্ব আইডির মাধ্যমে একটি ডিফল্ট ঘরে যোগদান করে। দস্তাবেজগুলি পরীক্ষা করুন: http://sket.io/docs/rooms-and-namespaces/#default-room

সুতরাং আপনি নিম্নলিখিত কোড সহ আইডি দ্বারা একটি সকেটে প্রসারণ করতে পারেন:

io.to(socketid).emit('message', 'for your eyes only');

(রুম_আইডি) এবং (ইউজার_সকেট_আইডি) এর মধ্যে পার্থক্য রয়েছে? আমি আসলে এমন ঘরে কোনও বার্তা প্রেরণের জন্য ব্যবহার করি যাতে এক বা একাধিক ব্যবহারকারী থাকতে পারে। "এটি অন্য সকেটে বার্তাগুলি সম্প্রচার করা সহজ করে তোলে:", তারপরে এক বা একাধিক হতে পারে, কোনও অনন্য ব্যক্তিগত নয়।
ওয়াশিংটন বোটেলহো

@ ওয়াশিংটনবোটালহো, সকেট আইডিগুলিতে সাধারণত "Uj5CRqZ5b_Xubx9sAAAA" এর মতো কিছু দেখতে পাওয়া যায়, তাই তাত্ত্বিকভাবে এমন কক্ষে একাধিক ব্যবহারকারী থাকতে পারে তবে বাস্তবে আমি কোনও ব্যবহারকারীর সাথে অন্য ব্যবহারকারীর ঘরে প্রবেশ করার বিষয়টি জানি না।
ওলেগ

9
আমরা কীভাবে একটি নির্দিষ্ট ব্যবহারকারীকে তাদের সকেটআইডি দ্বারা সনাক্ত করতে পারি, এর অর্থ কি আমাদের কোনও কী-মূল ব্যবহারকারীর (উদাহরণস্বরূপ-ব্যবহারকারীর নাম) এবং সকেটআইডি কোথাও সঞ্চয় করতে হবে?
সাঁই

@Mustafa Dokumacı merhaba, Bana বীর yardim এবং stackoverflow.com/questions/38817680/...
pishguy মাহদি

এটি কেবল এতটা অলৌকিক ... কেন আমাদের সকেট আইডি নম্বরে একটি বার্তা প্রেরণের উপায় সরবরাহ করবেন না এবং এটিই কি? যাইহোক আপবোটেড, কেবলমাত্র কাজ যা প্রায় 2.x এ কাজ করে
অ্যাড্রি

94

সকেট.ইও 1.0 এ আপনি নিম্নলিখিত কোড সহ এটি করতে পারেন:

if (io.sockets.connected[socketid]) {
    io.sockets.connected[socketid].emit('message', 'for your eyes only');
}

হালনাগাদ:

@ মোস্তফাডোকুমাকের উত্তরে আরও ভাল সমাধান রয়েছে।


4
এই উত্তরটি এবং উত্তম উত্তরের উত্তরের মধ্যে পার্থক্য হ'ল এই সমাধানের সাথে আপনার কলব্যাক থাকতে পারে যা দুর্দান্ত। তবে আইও টো (সকেটিড) দিয়ে আপনি কলব্যাক ব্যবহার করতে পারবেন না।
রমজান পোলাট

17

@ মুস্তফা ডকুমাক এবং @ করিউস ইতিমধ্যে যথেষ্ট তথ্য সরবরাহ করেছেন, আমি কীভাবে আপনি সকেট আইডি পেতে পারেন তা যোগ করছি।

সকেট আইডি পেতে সকেট আইডি ব্যবহার করুন :

var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);  
}

6

আপনি যদি একটি নেমস্পেস ব্যবহার করেছেন তবে আমি দেখতে পেয়েছি যে নিম্নলিখিত কাজ করে:

//Defining the namespace <br>
var nsp = io.of('/my-namespace');

//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');

নেমস্পেসগুলি সম্পর্কে আরও: http://sket.io/docs/rooms-and-namespaces/


5

আমি বিশ্বাস করি @ করিয়াস এবং @ মুস্তাফা ডকুমাক উভয়ই সমাধানগুলি সরবরাহ করেছেন যা ভালভাবে কাজ করে। পার্থক্যটি হ'ল @ মুস্তাফা ডকুমাকাসের সমাধানের সাথে বার্তাটি কেবল একটি নির্দিষ্ট ক্লায়েন্টকেই নয়, একটি ঘরে প্রচার করা হয়।

স্বীকৃতি চাওয়ার সময় পার্থক্যটি উল্লেখযোগ্য difference

io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});

প্রত্যাশিত হিসাবে কাজ করে, যখন

io.to(socketid).emit('message', 'for your eyes only', function(data) {...});

সঙ্গে ব্যর্থ

Error: Callbacks are not supported when broadcasting

1

নোড.জেজেস -> সকেট.ইও -> ডাউনলোড করার জন্য একটি চ্যাটের উদাহরণ রয়েছে এটি লাইনটিতে আটকান (সংযোগে আইও) অংশে .. আমি এই কোডটি ব্যবহার করি যা 100% কাজ করে

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log(socket.id);
    io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
  });
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.