2015-07-14 4 views
9

मैं सिग्नल से खुले कनेक्शन की सूची कैसे प्राप्त कर सकता हूं बिना उन्हें "पिंग" या मैन्युअल रूप से अपनी सूची में पंजीकृत कर सकता हूं?सिग्नल में खुले कनेक्शन की सूची?

अद्यतन: या सिर्फ उन ग्राहकों की संख्या प्राप्त करने के लिए जिनके लिए एक हब से संदेश भेजा गया था। मैं जानना चाहता हूं कि मुझे कितने प्रतिक्रियाओं का इंतजार करना चाहिए (पूरे टाइमआउट की प्रतीक्षा किए बिना)।

(, के बाद से SignalR जब एक केंद्र से ग्राहकों को कॉल, मैं एक संदेश है कि ग्राहकों हब पर भेजी जा रही द्वारा परिणामों का संग्रह कर रहा हूँ वापसी मूल्यों का समर्थन नहीं करता।)

स्पष्टीकरण: मुझे लगता है SignalR को पता होना चाहिए कौन सा कनेक्शन एक संदेश भेज रहा है।

+1

मुझे नहीं लगता कि आप कर सकते हैं। –

उत्तर

1

मुझे अभी तक ऐसा करने का कोई प्रत्यक्ष तरीका नहीं मिला है।

अब तक का सबसे अच्छा मैं ट्यूटोरियल का पालन कर रहा हूं - USERS BY CONNECTIONS IN SIGNALR, आप लिंक में और कोड पा सकते हैं, मैंने इसे बुनियादी समझ के लिए सरल बना दिया है।

public void Register(HubClientPayload payload, string connectionId) 
{  
    lock (_lock) 
    { 
     List<String> connections; 
     if (_registeredClients.TryGetValue(payload.UniqueID, out connections)) 
     { 
      if (!connections.Any(connection => connectionID == connection)) 
      { 
       connections.Add(connectionId); 
      } 
     } 
     else 
     { 
      _registeredClients[payload.UniqueID] = new List<string> { connectionId }; 
     } 
    }   
} 

और

public Task Disconnect(string connectionId) 
{  
    lock (_lock) 
    { 
     var connections = _registeredClients.FirstOrDefault(c => c.Value.Any(connection => connection == connectionId));  
     // if we are tracking a client with this connection remove it 
     if (!CollectionUtil.IsNullOrEmpty(connections.Value)) 
     { 
      connections.Value.Remove(connectionId);  
      // if there are no connections for the client, remove the client from the tracking dictionary 
      if (CollectionUtil.IsNullOrEmpty(connections.Value)) 
      { 
       _registeredClients.Remove(connections.Key); 
      } 
     }     
    return null; 
} 

भी

public Task Reconnect(string connectionId) 
{ 
    Context.Clients[connectionId].reRegister();  
    return null; 
} 
2

आप उपयोगकर्ता के आईडी onConnected की दुकान और डिस्कनेक्ट पर इसे हटा सकते हैं। देखें यह केवल एक उदाहरण एक डेटाबेस का उपयोग जुड़ा आईडी

protected Task OnConnected(IRequest request, string connectionId){ 
    var context=new dbContext(); 
    context.Connections.Add(connectionId); 
    context.Save(); 
    } 
    protected Task OnDisconnected(IRequest request, string connectionId){   
    var context=new dbContext(); 
    var id=context.Connections.FirstOrDefault(e=>e.connectionId==connectionId); 
    context.Connections.Remove(id); 
    context.Save(); 
    } 

लागू करने के लिए तो हर जगह आप कनेक्ट id की सूची का उपयोग करने की जरूरत है, तो आप अपने डाटाबेस का अनुरोध है।

+2

आपको पुनः कनेक्ट करने की भी आवश्यकता है – CMS

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