আপডেট সম্পাদনা, নীচে বিকল্প 3 দেখুন। বাকি সমস্ত সময়সীমার উপর নির্ভর করছে, আমি একটি জোর করে সংযোগ বিচ্ছিন্ন করে পোস্ট করেছি।
আপনি যদি ফোর্স সংযোগ বিচ্ছিন্ন করার চেষ্টা করে থাকেন - আপনি সংযুক্ত ব্যবহারকারীদের তালিকা পেতে এবং কল করতে পারেন ForceLogOut
সার্ভারের পাশে ফাংশনটি , কোড কোডে আমি এটি কোথাও দেখেছি, আমি আশা করি এটি সহায়তা করবে। আপনি যদি কেবলমাত্র কিছু ব্যবহারকারীকে জোরপূর্বক লগআউট / হত্যা করতে চান তবে কেবল সেই সংযোগটি লুপ করুন এবং হত্যা করুন।
সার্ভার সাইড
public class User
{
public string Name { get; set; }
public HashSet<string> ConnectionIds { get; set; }
}
public class ExtendedHub : Hub
{
private static readonly ConcurrentDictionary<string, User> ActiveUsers =
new ConcurrentDictionary<string, User>(StringComparer.InvariantCultureIgnoreCase);
public IEnumerable<string> GetConnectedUsers()
{
return ActiveUsers.Where(x => {
lock (x.Value.ConnectionIds)
{
return !x.Value.ConnectionIds.Contains
(Context.ConnectionId, StringComparer.InvariantCultureIgnoreCase);
}
}).Select(x => x.Key);
}
public void forceLogOut(string to)
{
User receiver;
if (ActiveUsers.TryGetValue(to, out receiver))
{
IEnumerable<string> allReceivers;
lock (receiver.ConnectionIds)
{
allReceivers = receiver.ConnectionIds.Concat(receiver.ConnectionIds);
}
foreach (var cid in allReceivers)
{
// ***************** log out/KILL connection for whom ever your want here
Clients.Client(cid).Signout();
}
}
}
}
মক্কেলের পক্ষে
// 1- Save your connection variable when you start it, and later on you can use it to stop.
var myHubProxy = $.connection.myHub
// 2- Use it when you need to stop it, IF NOT YOU WILL GET AN ERROR
myHubProxy.client.stopClient = function() {
$.connection.hub.stop();
};
// With a button for testing
$('#SomeButtonKillSignalr').click(function () {
$.connection.hub.stop();
});
অপশন 3 এর সাথে আপডেট হয়েছে : অনুরোধের ভিত্তিতে ... অন্য সমাধানগুলি সময়ের বাইরে নির্ভর করে তবে আপনি নিজেও সংযোগটি ডিসপোজ করে সরাসরি এটিকে জোর করতে পারেন
আমি সিগন্যালআর কোডটি খোলার চেষ্টা করেছি এবং ভিতরে আপনি দেখতে পাচ্ছেন DisposeAndRemoveAsync
ক্লায়েন্ট সংযোগের প্রকৃত সমাপ্তি ।
1- আপনি পরিবর্তন বা কল করতে পারেন DisposeAndRemoveAsync
আপনার সংযোগটি ।
2- তারপরে কল করুন RemoveConnection(connection.ConnectionId);
public async Task DisposeAndRemoveAsync(HttpConnectionContext connection)
{
try
{
// this will force it
await connection.DisposeAsync();
}
catch (IOException ex)
{
_logger.ConnectionReset(connection.ConnectionId, ex);
}
catch (WebSocketException ex) when (ex.InnerException is IOException)
{
_logger.ConnectionReset(connection.ConnectionId, ex);
}
catch (Exception ex)
{
_logger.FailedDispose(connection.ConnectionId, ex);
}
finally
{
// Remove it from the list after disposal so that's it's easy to see
// connections that might be in a hung state via the connections list
RemoveConnection(connection.ConnectionId);
}
}
সাবধানতা, এটি সম্পন্ন হওয়ার পরে কোনও নিজেকে পরিষ্কার করুন।