it-swarm.dev

كيفية إرسال رسالة إلى عميل معين مع socket.io

أبدأ بـ socket.io + node.js ، وأنا أعلم كيفية إرسال رسالة محليًا وبث وظيفة socket.broadcast.emit(): - يتلقى جميع العملاء المتصلين نفس الرسالة.

الآن ، أود أن أعرف كيفية إرسال رسالة خاصة إلى عميل معين ، أعني مأخذ واحد للدردشة الخاصة بين شخصين (تدفق العميل إلى العميل). شكر.

77
Nizar B.

عندما يتصل المستخدم ، يجب أن يرسل رسالة إلى الخادم باسم مستخدم يجب أن يكون فريدًا ، مثل البريد الإلكتروني.

يجب تخزين زوج من اسم المستخدم والمقبس في كائن مثل هذا:

var users = {
    '[email protected]': [socket object],
    '[email protected]': [socket object],
    '[email protected]': [socket object]
}

على العميل ، ينبعث كائن إلى الخادم بالبيانات التالية:

{
    to:[the other receiver's username as a string],
    from:[the person who sent the message as string],
    message:[the message to be sent as string]
}

على الخادم ، استمع للرسائل. عندما يتم تلقي رسالة ، ينبعث البيانات إلى المتلقي.

users[data.to].emit('receivedMessage', data)

على العميل ، استمع إلى الرسائل الصادرة من الخادم المسمى "receivedMessage" ، ومن خلال قراءة البيانات ، يمكنك التعامل مع من جاء والرسالة التي تم إرسالها.

84
Adam

يمكنك استخدام غرف socket.io. من جانب العميل ينبعث منها حدث ("الانضمام" في هذه الحالة ، يمكن أن يكون أي شيء) مع أي معرف فريد (البريد الإلكتروني ، معرف).

جانب العميل:

var socket = io.connect('http://localhost');
socket.emit('join', {email: [email protected]});

الآن ، من جانب الخادم ، استخدم هذه المعلومات لإنشاء غرفة فريدة لهذا المستخدم

جانب الخادم:

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

io.sockets.on('connection', function (socket) {
  socket.on('join', function (data) {
    socket.join(data.email); // We are using room of socket io
  });
});

لذلك ، انضم الآن كل مستخدم إلى غرفة سميت باسم البريد الإلكتروني للمستخدم. لذلك إذا كنت ترغب في إرسال رسالة إلى مستخدم معين ، فيجب عليك فقط

جانب الخادم:

io.sockets.in('[email protected]').emit('new_msg', {msg: 'hello'});

آخر شيء تبقى للقيام به من جانب العميل هو الاستماع إلى الحدث "new_msg".

جانب العميل:

socket.on("new_msg", function(data) {
    alert(data.msg);
}

آمل أن تحصل على هذه الفكرة.

225
az7ar

بالتأكيد: ببساطة ،

هذا هو ما تحتاجه :

io.to(socket.id).emit("event", data);

كلما انضم مستخدم إلى الخادم ، سيتم إنشاء تفاصيل المقبس بما في ذلك المعرف. هذا هو المعرف يساعد حقا في إرسال رسالة إلى أشخاص معينين.

أولا نحتاج إلى تخزين جميع socket.ids في مجموعة ،

var people={};

people[name] =  socket.id;

هنا اسم هو اسم المتلقي. مثال:

people["ccccc"]=2387423cjhgfwerwer23;

لذلك ، الآن يمكننا الحصول على هذا socket.id مع اسم المتلقي كلما نرسل رسالة:

لهذا نحن بحاجة إلى معرفة اسم المتلقي. تحتاج إلى إرسال اسم المتلقي إلى الخادم.

الشيء الأخير هو:

 socket.on('chat message', function(data){
io.to(people[data.receiver]).emit('chat message', data.msg);
});

آمل أن يكون هذا يعمل بشكل جيد بالنسبة لك.

حظا سعيدا!!

24
Trojan

يمكنك الرجوع إلى socket.io غرف . عندما تصافح مأخذ توصيل - يمكنك الانضمام إليه إلى الغرفة المسماة ، على سبيل المثال "المستخدم. # {userid}".

بعد ذلك ، يمكنك إرسال رسالة خاصة إلى أي عميل بالاسم المناسب ، على سبيل المثال:

io.sockets.in ('user.125'). تنبعث منها ('new_message' ، {text: "Hello world"})

في العملية أعلاه ، نرسل "new_message" إلى المستخدم "125".

شكر.

8
Vladimir Kurijov

في مشروع لشركتنا ، نستخدم نهج "الغرف" وهو الاسم عبارة عن مزيج من معرفات المستخدمين لجميع المستخدمين في محادثة كمعرف فريد (تنفيذنا أشبه facebook messenger) ، مثال:

| معرف | اسم | 1 | سكوت | 2 | سوزان

سيكون اسم "الغرفة" هو "1-2" (يتم طلب المعرفات تصاعديًا) وعند قطع اتصال socket.io ينظف الغرفة تلقائيًا

وبهذه الطريقة ترسل رسائل إلى تلك الغرفة وفقط للمستخدمين المتصلين (المتصلين) (أقل الحزم المرسلة عبر الخادم).

2
Rami

اسمحوا لي أن تجعل الأمر أكثر بساطة مع غرف socket.io. طلب خادم ذي معرف فريد للانضمام إلى خادم. نحن هنا نستخدم بريدًا إلكترونيًا كمعرف فريد.

Socket.io العميل

socket.on('connect', function () {
  socket.emit('join', {email: [email protected]});
});

عندما انضم المستخدم إلى خادم ، قم بتكوين مساحة لهذا المستخدم

خادم Socket.io

io.on('connection', function (socket) {
   socket.on('join', function (data) {    
    socket.join(data.email);
  });
});

الآن نحن جميعا مع مجموعة الانضمام. اترك انبعاث شيء من غرفة الخادم to ، بحيث يمكن للمستخدم الاستماع.

خادم Socket.io

io.to('[email protected]').emit('message', {msg: 'hello world.'});

دع اللمسات الأخيرة على الموضوع من خلال الاستماع إلى الحدث message إلى جانب العميل

socket.on("message", function(data) {
  alert(data.msg);
});

المرجع من غرف Socket.io

0
Lalit Mohan