我正在開發基於客戶端 - 服務器的應用程序。而且我想限制登錄到我的應用程序的用戶數量 。 我的第一種方法是創建一個表(稱爲「X」),以存儲成功登錄到應用程序的每個用戶的用戶標識,機器名稱,IP .. 。 在每次登錄時,我檢查表格「X」中的行數,如果等於極限 ,那麼我會提醒用戶,如果沒有,我向表格「X」添加一條新記錄,將 當前行存儲爲對象在一個靜態對象中。 當用戶註銷時,我刪除與保存的靜態對象關聯的記錄。 我正在調用刪除formclosing事件中的記錄的功能,這個工作正常,但唯一的問題是,如果我按下「結束任務」或「結束進程」或任何其他異常操作,記錄將保留在表中。 你在這種情況下建議做什麼?併發用戶到Windows窗體應用程序
1
A
回答
1
最好的方法是創建長久的tcp連接到您的服務器並檢測它何時關閉 - 從應用程序終止到網絡的任何原因都會失敗。
如果您的服務器技術不允許創建此類連接。您應該週期性地將「我活着」的數據包從客戶端發送到服務器。如果超時超時,請將此類客戶端標記爲斷開連接。
0
我有一個類似的困境,我決定永遠保留在緩存/數據庫中的一切。 我的解決方案是,我限制緩存大小...(你可以在下面找到我的代碼)
public class CacheWithSizeLimit<TKey,TValue>
{
private int _cacheSize;
public CacheWithSizeLimit(int cacheSize = 10000)
{
Cache = new ConcurrentDictionary<int, KeyValuePair<TKey, TValue>>();
_cacheSize = cacheSize;
}
private ConcurrentDictionary<int, KeyValuePair<TKey, TValue>> Cache { get; set; }
public TValue GetCachedValue(TKey inputKey)
{
KeyValuePair<TKey,TValue> result;
var key = inputKey.GetHashCode() % _cacheSize;
Cache.TryGetValue(key, out result);
if (!IsNullOrEmpty(result.Key) && result.Key.Equals(inputKey))
{
return result.Value;
}
return default(TValue);
}
private bool IsNullOrEmpty<T>(T value)
{
return EqualityComparer<T>.Default.Equals(value, default(T));
}
public void SetCachedValue(TKey inputKey, TValue inputValue)
{
var key = inputKey.GetHashCode() % _cacheSize;
Cache.AddOrUpdate(key, new KeyValuePair<TKey, TValue>(inputKey, inputValue));
}
internal void Clear()
{
Cache = new ConcurrentDictionary<int, KeyValuePair<TKey, TValue>>();
}
}
如果這種方法不爲你工作,那麼你可以依靠的實際連接斷開事件或超時。
0
謝謝大家的建議。在與隊友 進一步討論這個問題後,我決定在用戶登錄時運行一個小型的後臺應用程序,通過 正確的參數,這個應用程序將爲我做所有的檢查。
相關問題
- 1. Windows窗體應用程序
- 2. 合併Windows窗體應用程序 - Win32項目應用程序
- 3. 使用C#Windows窗體應用程序
- 4. Windows窗體應用程序使用HTML
- 5. 發送數據到Windows窗體應用程序
- 6. Windows窗體發佈到不同的應用程序
- 7. 使用Windows窗體應用程序自動登錄用戶?
- 8. VS2010,Windows窗體應用程序
- 9. Windows窗體應用程序性能
- 10. Windows多窗體應用程序設計
- 11. 不兼容Windows窗體應用程序
- 12. Windows窗體應用程序中的Windows.Web.Http?
- 13. Windows窗體應用程序中的WCF
- 14. 部署VB.NET Windows窗體應用程序
- 15. 便攜式Windows窗體應用程序
- 16. Windows窗體應用程序錯誤
- 17. Arduino_Visual_Studio-Windows窗體應用程序
- 18. WPF或Windows窗體應用程序
- 19. 帶Web應用程序的Windows窗體
- 20. Windows窗體應用程序異常
- 21. Windows窗體應用程序跟蹤
- 22. 打開Windows窗體應用程序
- 23. Windows窗體應用程序的定位
- 24. Windows窗體應用程序中的SQLException
- 25. 創建Windows窗體C#應用程序
- 26. ToolBox,Windows窗體應用程序
- 27. 缺少Windows窗體應用程序
- 28. C#Windows窗體應用程序關閉
- 29. Windows窗體應用程序數據庫
- 30. 在Windows窗體應用程序
我想最常見的方法是讓會話在一段時間的沉默之後超時。這確實意味着您的應用程序需要定期發送保持活動的消息。 –
您也可以在後臺線程中發送活動信號,並根據活動連接的數量來決定。 –