Saya mulai dengan socket.io + node.js, saya tahu cara mengirim pesan secara lokal dan menyiarkan socket.broadcast.emit()
fungsi: - semua klien yang terhubung menerima pesan yang sama.
Sekarang, saya ingin tahu cara mengirim pesan pribadi ke klien tertentu, maksud saya satu soket untuk obrolan pribadi antara 2 orang (aliran Klien-ke-Klien). Terima kasih.
Jawaban:
Ketika seorang pengguna terhubung, itu harus mengirim pesan ke server dengan nama pengguna yang harus unik, seperti email.
Sepasang nama pengguna dan soket harus disimpan dalam objek seperti ini:
Di klien, keluarkan objek ke server dengan data berikut:
Di server, dengarkan pesan. Saat pesan diterima, kirimkan data ke penerima.
Pada klien, dengarkan emit dari server yang disebut 'acceptMessage', dan dengan membaca data Anda dapat menangani siapa asalnya dan pesan yang dikirim.
sumber
Anda dapat menggunakan ruang socket.io. Dari sisi klien, keluarkan acara ("gabung" dalam hal ini, bisa apa saja) dengan pengenal unik apa pun (email, id).
Sisi klien:
Sekarang, dari sisi server gunakan informasi itu untuk membuat ruang unik bagi pengguna tersebut
Sisi server:
Jadi, sekarang setiap pengguna telah bergabung dengan ruang yang dinamai menurut email pengguna. Jadi, jika Anda ingin mengirim pesan kepada pengguna tertentu, Anda hanya perlu melakukannya
Sisi server:
Hal terakhir yang harus dilakukan di sisi klien adalah mendengarkan peristiwa "new_msg".
Sisi klien:
Saya harap Anda mengerti.
sumber
socket.io-redis
.{email: [email protected]}
berbeda untuk semua koneksi Bukankah semua klien yang pergi ke aplikasi memiliki pengguna[email protected]
bagaimana saya membuatnya menjadi pengguna[email protected]
untuk klien kedua yang terhubung sehingga saya bisa memiliki ruangan yang berbeda. maaf jika ini pertanyaan yang mengganggu.PASTI: Sederhananya,
Inilah yang Anda butuhkan:
setiap kali pengguna bergabung ke server, detail soket akan dibuat termasuk ID. Ini adalah ID yang sangat membantu untuk mengirim pesan ke orang-orang tertentu.
pertama kita perlu menyimpan semua socket.ids dalam array,
di sini nama adalah nama penerima. Contoh:
Jadi, sekarang kita bisa mendapatkan socket.id itu dengan nama penerima setiap kali kita mengirim pesan:
untuk ini kita perlu mengetahui nama penerima. Anda perlu mengirimkan nama penerima ke server.
hal terakhir adalah:
Semoga ini bekerja dengan baik untuk Anda.
Semoga berhasil!!
sumber
Anda dapat merujuk ke ruang socket.io . Ketika Anda jabat tangan soket - Anda dapat bergabung dengannya ke ruang bernama, misalnya "pengguna. # {Userid}".
Setelah itu, Anda dapat mengirim pesan pribadi ke klien mana pun dengan nama yang sesuai, misalnya:
Dalam operasi di atas kami mengirim "pesan_baru" ke pengguna "125".
Terima kasih.
sumber
Dalam proyek perusahaan kami, kami menggunakan pendekatan "kamar" dan namanya adalah kombinasi dari ID pengguna dari semua pengguna dalam percakapan sebagai pengenal unik (implementasi kami lebih seperti facebook messenger), contoh:
| id | nama | 1 | Scott | 2 | Susan
Nama "kamar" akan menjadi "1-2" (id dipesan Asc.) dan pada putuskan soket.io secara otomatis membersihkan kamar
dengan cara ini Anda mengirim pesan hanya ke ruangan itu dan hanya ke pengguna online (terhubung) (lebih sedikit paket yang dikirim ke seluruh server).
sumber
Biarkan saya membuatnya lebih sederhana dengan ruang socket.io. meminta server dengan pengenal unik untuk bergabung dengan server. di sini kami menggunakan email sebagai pengenal unik.
Klien Socket.io
Saat pengguna bergabung dengan server, buat ruang untuk pengguna tersebut
Server Socket.io
Sekarang kita siap bergabung. biarkan memancarkan sesuatu dari server
to
, sehingga pengguna dapat mendengarkan.Server Socket.io
Mari selesaikan topik dengan mendengarkan
message
acara dari sisi klienReferensi dari ruang Socket.io
sumber