Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

cara mengakses sesi soket di semua cluster

Socket.io-redis memang melacak dalam arti tertentu..

Dari dokumen mereka

"Adaptor Redis memperluas fungsi siaran adaptor dalam memori:paket juga dipublikasikan ke saluran Redis (lihat di bawah untuk format nama saluran).

Setiap server Socket.IO menerima paket ini dan menyiarkannya ke daftar soketnya sendiri yang terhubung."

Jadi pada dasarnya, redis digunakan sebagai broker untuk memberi tahu setiap server soket untuk memancarkan berdasarkan saluran X dll. Memungkinkan Anda untuk memiliki server socket.io dalam mode cluster berfungsi, tetapi seperti yang telah Anda sebutkan itu bisa gagal ketika Anda perlu menyimpannya melacak hal-hal di luar hanya pancaran.

Jadi di mana ini meninggalkan kita.. Anda dapat menggunakan kait khusus melalui socket.io-redis tetapi secara pribadi saya merasa sangat sulit untuk memahami dan menggunakan dan memiliki keberhasilan yang terbatas secara pribadi. Saya pikir dengan versi baru socket.io dan socket.io redis ada beberapa penyesuaian untuk membuatnya lebih sederhana, namun saya belum mencobanya.

Sebagai gantinya, yang kami lakukan adalah menggunakan redis hset dan jget untuk menyimpan socket dan ID pengguna, kemudian ketika kami ingin membuat semua pengguna online, kami dapat meminta redis untuk mendapatkan daftar pengguna online atau pengguna di ruangan tertentu, dll.

Yang ingin Anda lakukan adalah menambahkan paket redis dan menghubungkannya ke pub / sub reguler.

Kemudian, ketika pengguna bergabung dengan ruang atau server Anda dalam hal ini, Anda akan melakukan hset. Pada bergabung pertama kita terlihat seperti ini

redis.hset([collection-name],[Field],[value])

Jadi dalam kode itu terlihat seperti

redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)

Ini akan menetapkan nilai dalam redis, jadi nama koleksi adalah nilai (bagi kami ini adalah id unik saluran) kemudian kami menyediakan 'socket.id' untuk Bidang bersama dengan 'nama panggilan' untuk nilainya. Nilai ini adalah ID pengguna ATAU anonimnya jika mereka tidak masuk

Kemudian, ketika kita ingin menangkap siapa yang ada di suatu ruangan kita menggunakan perintah hget

redis.HGETALL([collection-name],function(err,results){}

Jadi di dalam katakanlah memancarkan, kami memanggil perintah redis.HGETALL untuk mendapatkan semua item di dalam koleksi tertentu yang kami berikan dan mengirimkannya kembali ke semua pengguna yang terhubung.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kunci ioredis dengan Pola yang cocok

  2. Cara Menghapus Semua Data di Redis

  3. Menghentikan interaksi Redis dalam javascript menggunakan Sinon

  4. Dengarkan perubahan di Redis?

  5. Menggunakan Redis untuk mengimplementasikan login?