2012-02-27 12 views
11

मैं एएसपी.नेट एमवीसी 3 में अधिसूचना प्रणाली जैसे फेसबुक को कार्यान्वित करना चाहता हूं: अधिसूचनाएं किसी विशिष्ट उपयोगकर्ता को भेजी जाती हैं ताकि उसे अपने किसी एक आइटम पर कार्रवाई के लिए सूचित किया जा सके।सिग्नलर का उपयोग करें जैसे कि अधिसूचना प्रणाली जैसे फेसबुक

signalr ऐसी आवश्यकता के लिए अनुकूल है? सिग्नलआर का उपयोग करके मैं एक विशिष्ट उपयोगकर्ता (इस उपयोगकर्ता के सभी खुले सत्र) को एक अधिसूचना कैसे भेज सकता हूं?

संपादित

ठीक है, यहाँ मैं क्या

किया क्लाइंट पक्ष

$(function() { 
// Proxy created on the fly 
var chat = $.connection.chat; 
var username = '@Html.ViewContext.HttpContext.User.Identity.Name'; 
// Declare a function on the chat hub so the server can invoke it 
chat.addMessage = function (message) { 
    $('#messages').append('<li>' + message + '</li>'); 
}; 
// Start the connection 
$.connection.hub.start(function(){ 
    chat.join(username); 
}); 

}); 

में सर्वर साइड

public class Chat : Hub 
{ 
    public void Join(string username) 
    { 
     AddToGroup(username); 
    } 
} 

और हर बार में मैं एक उपयोगकर्ता को सूचित करने की आवश्यकता है नियंत्रक में मैं निम्नलिखित करता हूं:

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
dynamic clients = connectionManager.GetClients<Chat>(); 
clients[username].addMessage("test"); 

उत्तर

2

यह इस के लिए उपयुक्त है या आप मतदान का उपयोग करें, उन दो विकल्प हैं।

उसके बारे में यहां नए ब्रांड इस पर आज से वीडियो:

http://channel9.msdn.com/Shows/Web+Camps+TV/Damian-Edwards-and-David-Fowler-Demonstrate-SignalR?utm_source=dlvr.it&utm_medium=twitter

+0

thx एडम, क्या आपको लगता है कि मैंने अपने पोस्ट स्केल के अंत में जिस समाधान को पोस्ट किया है? Thx – hichn

+0

आपके नियंत्रक को अपने नियंत्रक में इंजेक्शन निर्भरता के रूप में IConnectionManager लेना चाहिए। आपको संकल्प() वास्तव में कहीं और कंट्रोलर फैक्ट्री को कॉल नहीं करना चाहिए। कुछ डी कंटेनर का उपयोग करें (उदाहरण के लिए एकता - unity.mvc3 nuget पैकेज) और अपने नियंत्रक में इंजेक्ट करने के लिए कन्स्ट्रक्टर इंजेक्शन का उपयोग करें। सुनिश्चित करें कि आपके पास IConnectionManager के ठोस कंक्रीट कार्यान्वयन पर एक निपटान विधि है जिसे आप HierarchicalLifetimeManager का उपयोग करके किए जाने पर इसे निपटाने के लिए एकता बताते हैं। निपटान सुनिश्चित करने के लिए ब्रेकपॉइंट सेट करें (केवल तभी यदि आप आईडीस्पोज़ेबल लागू कर रहे हैं) –

3

हां, सिग्नल इसके लिए एक अच्छा विकल्प है। हब्स (server और JS client) के संबंध में प्रलेखन पर नज़र डालें।

आपको अपने क्लाइंट के सत्र को सिग्नलर सत्र के साथ जोड़ने के लिए सर्वर तर्क को लागू करने की आवश्यकता है। आप प्रत्येक उपयोगकर्ता के सभी खुले सत्रों को सूचित करने के लिए समूहों का उपयोग कर सकते हैं।

+0

@ user1236014 एक उपयोगकर्ता जोड़ता है जब आप अपने उपयोगकर्ता नाम/पहचानकर्ता के साथ एक समूह के लिए अपने SignalR सत्र जोड़ने की जरूरत है। हर बार जब आपको किसी उपयोगकर्ता को सूचित करने की आवश्यकता होती है तो आप बस अपने समूह को एक संदेश प्रसारित करते हैं (यह गारंटी देता है कि सभी खुले सत्र अधिसूचित किए जाएंगे)। इस उदाहरण पर एक नजर डालें, तो यह आपको मदद कर सकता है: http://blog.maartenballiauw.be/post/2011/12/06/Using-SignalR-to-broadcast-a-slide-deck.aspx – nmat

+0

THX nmat, मेरे पोस्ट में लिखा गया समाधान ठीक काम करता है। क्या आपको लगता है कि यह बेहतर है? क्या आपको लगता है कि यह अच्छा है? – hichn

संबंधित मुद्दे