Windows窗体应用程序的并发用户

时间:2016-03-16 07:28:56

标签: c# winforms concurrency

我正在开发一个基于客户端服务器的应用程序。我想限制 登录我的应用程序的用户数。 我的第一种方法是创建一个表(称之为“X”)来存储用户ID,机器名称,IP .. 每个成功登录到应用程序的用户 在每次登录时,我检查表“X”中的行数,如果等于限制 然后我提醒用户,如果不是我将新记录添加到表“X”,存储 当前行作为静态对象中的对象。 当用户注销时,我删除与保存的静态对象关联的记录。 我正在调用删除formclosing事件中的记录的函数,这工作正常,但唯一的问题是,如果我按“结束任务”或“结束进程”或任何其他异常操作,记录将保留在表中。 在这种情况下你有什么建议?

3 个答案:

答案 0 :(得分:1)

最好的方法是创建与服务器的长寿命tcp连接并检测它何时关闭 - 它会以任何原因从应用程序终止到网络发生故障。

如果您的服务器技术不允许创建此类连接。您应该定期从客户端向服务器发送“我活着”的数据包。如果超出某些超时,请将此类客户端标记为已断开连接。

答案 1 :(得分:0)

我遇到了类似的困境,我决定永远保留缓存/数据库中的所有内容。 我的解决方案是我限制了缓存大小...(你可以在下面找到我的代码)

function getTable($sql_query)
{
    $conn=connectDB();
    $query_result = $conn->query($sql_query);     
    if(!$query_result)
    {
        $conn->close();
        die("MySQL error ");
    }
    $result = array();
    while($result[] = $query_result->fetch_assoc());
    $conn->close();
    return $result;
} 

如果这种方法对您不起作用,那么您可以依赖实际的连接断开事件或超时。

答案 2 :(得分:0)

谢谢你们的建议。在进一步讨论了这个问题之后 团队,我决定在用户​​登录,传递时运行一个小的后台应用程序 正确的参数和这个应用程序将为我做所有的检查。