सिग्नलआर प्रत्येक कनेक्शन के लिए ConnectionId प्रदान करता है। यह पता लगाने के लिए कि किस कनेक्शन का संबंध किससे (उपयोगकर्ता) है, हमें कनेक्शन और उपयोगकर्ता के बीच एक मैपिंग बनाने की आवश्यकता है। यह इस बात पर निर्भर करता है कि आप अपने एप्लिकेशन में किसी उपयोगकर्ता की पहचान कैसे करते हैं।
सिग्नलआर 2.0 में, यह इनबिल्ट का उपयोग करके किया जाता है IPrincipal.Identity.Name
, जो एएसपी.नेट प्रमाणीकरण के दौरान सेट किए गए उपयोगकर्ता पहचानकर्ता में लॉग होता है।
हालाँकि, आपको पहचानकर्ता का उपयोग करने के बजाय किसी भिन्न पहचानकर्ता का उपयोग करके उपयोगकर्ता के साथ कनेक्शन मैप करना पड़ सकता है। इस प्रयोजन के लिए इस नए प्रदाता को कनेक्शन के साथ उपयोगकर्ता को मैप करने के लिए आपके कस्टम कार्यान्वयन के साथ उपयोग किया जा सकता है।
मैपिंग सिग्नलआर का उदाहरण IUserIdProvider का उपयोग करने वाले कनेक्शनों के लिए
मान लें कि हमारा एप्लिकेशन userId
प्रत्येक उपयोगकर्ता की पहचान करने के लिए एक का उपयोग करता है । अब, हमें एक विशिष्ट उपयोगकर्ता को संदेश भेजने की आवश्यकता है। हमारे पास userId
और है message
, लेकिन सिग्नलआर को हमारे उपयोगकर्ता आईडी और कनेक्शन के बीच मैपिंग भी पता होना चाहिए।
इसे प्राप्त करने के लिए, पहले हमें एक नया वर्ग बनाने की आवश्यकता है, जो लागू होता है IUserIdProvider
:
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
// your logic to fetch a user identifier goes here.
// for example:
var userId = MyCustomUserClass.FindUserId(request.User.Identity.Name);
return userId.ToString();
}
}
दूसरा कदम सिग्नल CustomUserIdProvider
कार्यान्वयन को डिफ़ॉल्ट कार्यान्वयन के बजाय हमारे उपयोग के लिए बताना है । हब कॉन्फ़िगरेशन को प्रारंभ करते समय स्टार्टअप्स में यह किया जा सकता है:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var idProvider = new CustomUserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => idProvider);
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
अब, आप किसी विशिष्ट उपयोगकर्ता को संदेश भेज सकते हैं userId
, जैसे कि प्रलेखन में उल्लिखित है, जैसे:
public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}
उम्मीद है की यह मदद करेगा।