2015-10-01 25 views
10

Websockets hakkında çok şey okudum ve sistemimde zaten uygulamıştım. Bu soru onları nasıl düzgün kullanacağımızla ilgilidir. Bir bildirim ve sohbet sistemini doğru şekilde uygulamak istiyorum.Websockets Notification-/Chat- Sistem

Bildirimler için, "bildirimler/kanal" kanalım var ve sohbetler için "sohbet/kanal" kanalım var.

Bu iki kanal da "global" değil mi? Sitenin 1.000.000 kullanıcıya sahip olduğunu varsayalım, bu da tüm bu kullanıcıların bu iki kanalda olacağı anlamına gelir. Bir bildirim başka bir kullanıcıya gönderildiğinde, bu, mesajın 1.000.000 kullanıcının abone olduğu bir kanaldan gönderildiği anlamına gelir.

Sohbet mesajlarıyla aynı. Bir kullanıcının başka bir kullanıcıyla sohbet etmek istediğini varsayalım. Her mesaj, tüm kullanıcıların abone olduğu ve sonunda, kanalın, sadece bir hedef alıcının geçen alıcı_id nedeniyle mesajı alacağı kanaldan geçecektir.

Doğru bildirim kanalları ve "özel" sohbet kanalları nasıl kullanılır?

o (Grup sohbetleri Ve bildirimler, örneğin "bildirimleri/kanal/kullanıcı1"), her bir kullanıcı için bir "alt kanal" oluşturmak için daha fazla ölçülebilir ve güvenli olması ya da sadece büyük bir kanalda tüm kullanıcıları izin verir misin? aşağıdaki gibi

+0

Fikir yok mu? Bu herkesin websockets söz konusu olduğunda düşünmesi gereken bir şey olduğunu düşünüyorum, bu yüzden bunu yapmak için önerilen bir yol olmalı. – user3746259

+0

1 milyon kullanıcının aynı grupta sohbet etmesini gerçekten ister misiniz? Aksi takdirde, bir şeyleri alt gruplara ayırmanız gerekir. Bildirimlerle aynı. Performans etkilerine ek olarak, tüm kullanıcılar gizlilik nedenleriyle tüm bildirimleri almamalıdır. – gzost

+0

Bir büyük grupta sohbet etmek veya bildirim göndermek istemedim - Büyük bir kanalda kastettim ve belirli kullanıcılara yönlendirdim. – user3746259

cevap

1

Şahsen, bu ele alacağını yoludur:

Her kullanıcı 1 WebSocket bağlantısı vardır. Bu bağlantı tüm verileri iletmek için kullanılacaktır. Verileri ileri ve geri aktarmak için bir json formatı kullanırdım. Mesaj türünü ve sohbet odası kimliği gibi diğer bilgileri belirtmek için json yapısında bir alan kullanırdım.

{ 
    "type":"chat", 
    "chatID":4756, 
    "message":"Hello, world!" 
} 

İstemci taraflı JavaScript mantık: Bir sohbet mesajı böyle bir şey olacağını

{ 
    "type":"notification", 
    "message":"New Mail" 
} 

: Bir bildirim göndermek istedim Yani, bu (gerçekten basit örnek) gibi bir şey olabilir mesajın türünü ve bununla ne yapacağını belirler. Sunucu tarafı mantığı, kullanıcının belirtilen sohbet odasına "abone" olup olmadığını belirler, böylece hangi sohbet mesajlarının hangi kullanıcıya gönderileceğini bilir. Bu, onu güvende tutacağından, bir oda kimliğine abone olmayan kullanıcılara sohbet mesajları göndermiyorsunuz.

Bu yöntem hakkında herhangi bir açıklama yapmanız gerekip gerekmediğini bildirin.

+0

Güzel bir yaklaşım, ama yukarıda okuduğum gibi, belirli kullanıcı Gruplarının sohbet edebileceği bildirimler ve özel sohbet kanalları için kullanıcı kanalları oluşturmak için bir sonuca vardım. Yani, bence, daha iyi ayrılmış bir model. – user3746259

+0

* Bu sizinkilerden farklıdır, çünkü her kullanıcı için yalnızca bir kanalınız olur ve ayrı sohbet kanalları olmaz. Güvenlik Denetimleri ayrıca Sunucu tarafında, kullanıcının bir kanalı – user3746259

+0

** abone olmaya çalıştığı ve yalnızca js kullanarak istemciden istemciye doğrudan ileti göndermek için yaklaşımı kullanamayacağı Moment'te yapılabilir - ama sanırım bu değil Çok kötü Çünkü Sunucu tarafı Kontroller Her durumda yapılmalıdır Her zaman – user3746259

İlgili konular