标签: multi-user

悲观与乐观并发(锁定与反馈)

我正在使用以下标准构建应用程序:

  • 工作项目:需要由用户通过网络手动处理的项目(简短的一页表格)
  • 多个用户正在使用"工作项"
  • 每个用户都有一个"工作项"队列
  • 有一个搜索允许用户查看"工作项"并将"工作项"分配给他们的队列
  • 用户可以将"工作项目"从其他人的队列中分配出来,将其分配给自己

注意:'工作项'只能使用一次.这不是一个维基页面,它更像是一个匹配练习,只能由一个用户执行一次.一旦"工作项目"工作,它就会从系统中消失(除了一些审计/报告),有点像错误跟踪系统

您认为哪个选项更好?你能举出任何支持你观点的主流应用吗?

选项1:

  • 当用户A前往查看或工作"工作项目"时,"工作项"将被锁定.
  • 当其他用户在用户A打开"工作项"后转到"工作项"时,他们只能看到"工作项".他们不能写.
  • 锁定在n分钟后到期,此时另一个用户可以锁定"工作项".

选项2:

  • 任何用户都可以在不锁定的情况下拉出"工作项".
  • 如果用户A通过提交表单来处理"工作项"并且用户B工作相同的"工作项",那么用户A的工作将在数据库中生效,并且用户B将被告知他们的更改没有生效,因为另一个用户修改了"工作项".

我个人喜欢选项2.请问?

concurrency locking editing multi-user

6
推荐指数
1
解决办法
2505
查看次数

处理多用户环境

这是我第一次开发一个应用程序,将由10-15人使用,因为我不确定最小化更新冲突的好方法.

基本上,我的应用程序如下工作.新项目在收到后通过外部服务插入数据库.业务规则表明每个项目将由两名独立员工进行审核.不用说,项目和评论之间存在一对多的关系.什么是应用的一个重要方面是,没有项目可以超过2条评论中,系统必须跟踪谁是两个审稿人.此外,谁是第一个评论员,第二个.

现在,我有一切工作.我正在处理的问题是这个(许多类似场景之一).如果所有用户在相同的5分钟内刷新他们的项目列表会发生什么.用户1提交项目ID 1的评论.第二个人对同一项目提交评论.现在,第三人提交了对项目ID 1的评论,但已经有2条评论,因此该项目已被标记为已完成.

处理多用户环境的可能方法是什么,多个用户可能更新同一记录?

.net c# nhibernate multi-user

6
推荐指数
2
解决办法
255
查看次数

Symfony2授权:选民比.ACL

我即将开始一个项目,需要几种具有不同"权力"的用户.

为了给出一些上下文,我期待1000到10000个用户.

我至少有3个"层":A,B,C

"A"可以是"咨询公司",每个公司都有不同的客户"B",每个客户都有几个项目"C".

一个用户可能需要查看其公司"A"管理的所有项目的概述.另一个只是其中一个公司"B".另一个项目"A".某些用户可能会在每个级别上被授予更细粒度的细节(可能用户在"B"级别上具有细粒度级别但在"A"级别上看不到任何内容).某些用户可能只有读取权限,其他用户可以阅读和修改,有些用户可以阅读,修改和创建.

最后,我可能会得到100000或100万个"对象",我必须向其授予读/写/删除/修改权限.

我必须在相对简单的选民系统或完整的ACL之间做出选择.虽然看起来非常强大,但我注意到ACL并没有很好地记录在案.我几乎丢弃了选民,但后来我读到了这篇让我改变主意的文章.从文章引用:

这通常是您在谈论ACL时所能想到的:能够说"此用户"可以"编辑"某些"对象".在Symfony2中,您可以利用自定义选民来使用您拥有的任何复杂业务逻辑来确定这一点.

根据这篇文章你可以使用选民作为:

isGranted的另一个常见未知属性是第二个参数,它是任何类型的"对象"

所以这是我的问题,考虑到我暴露的背景:

1)选民选项是否会授予我所需的所有灵活性?

2)性能明智(ACL特别指出,即使有数百万个对象也没有性能衰退,我对选民有疑虑)

3)如果我选择选民,我可以安全地使用FOSUserBundle,尽管指定了与Symfony 1.2相关的东西吗?

security authorization multi-user symfony

6
推荐指数
1
解决办法
1872
查看次数

Android应用程序看起来不符合克隆条件

我正在尝试克隆我的应用程序,以便为同一个应用程序使用多用户帐户.这是许多制造商现在的内置功能.一些应用程序也支持这样做,如Cloneit,Parallel等.

我的问题是我的应用程序没有出现在可以克隆的应用程序列表中.既不是制造商选项也不是其他克隆应用程序.我的应用程序中是否有任何设置?因为它有资格克隆谢谢

android clone multi-user

6
推荐指数
1
解决办法
668
查看次数

运行GNU Screen suid root是使多用户模式工作的唯一方法吗?

我正在运行Ubuntu 11.10和GNU屏幕版本“ 4.00.03jw4”,并且正在尝试使用多用户模式。

以下过程对我有用:

as user "first_user"
> sudo chmod u+s /usr/bin/screen
> sudo chmod 755 /var/run/screen

and only after that can you do
> screen -S session_name
or if you've already created a screen session,
> screen -r session_name

and inside of screen:
>^A:multiuser on
>^A:acladd second_user "#?"

and if you want second_user to only be an observer
>^A:aclchg second_user -w "#?"

now you can, as user "second_user", do
> screen -x first_user/
to connect 

when you're all done, …
Run Code Online (Sandbox Code Playgroud)

gnu-screen multi-user suid

5
推荐指数
1
解决办法
7310
查看次数

在持久游戏中处理多个iOS Game Center用户

我已阅读http://developer.apple.com/library/ios/#DOCUMENTATION/NetworkingInternet/Conceptual/GameKit_Guide/Achievements/Achievements.html#//apple_ref/doc/uid/TP40008304-CH7-SW13.

我对在单个设备上支持多个游戏中心用户的问题感到困惑.

特别是,我很困惑如何在一个具有整体持久性进展的游戏中做到这一点,比如冒险游戏或填字游戏.

也就是说,我认为有两种游戏.在一个,你开始游戏,直到你死,然后游戏结束.使用Game Center多用户模型,这种游戏似乎很容易处理.当一个新的游戏中心玩家登录时,我可以加载他们的游戏中心统计数据,然后他们可以玩游戏,我会相应地调整他们的成就/分数.唯一的特例是,如果游戏中心玩家A正在玩游戏,游戏进入后台并且游戏中心玩家B登录,然后游戏到达前景会发生什么?在这种情况下,似乎很容易结束正在进行的游戏并说"对不起,你切换了游戏中心的用户.你需要开始一个新的游戏."

但是另一种类型的游戏是持续存在的,通常是自动的游戏.例如,假设我有一个有100个谜题的填字游戏.假设玩家A完成了8个谜题并且正在完成第9个谜题,然后游戏中心玩家改变为玩家B.假设玩家A已经获得了"解决了5个谜题"的成就.现在玩家B已经登录会发生什么?

采用"正确"方式做到这一点(上面似乎是苹果公司文件暗示的那个)是游戏应该为每个游戏中心玩家保持一个完整的保存状态.因此,当玩家B登录时,玩家A的状态应该自动保存到侧面并且谜题应该清除,因此玩家B可以从头开始对其进行操作.即使这样,当玩家A在新设备上安装游戏时仍会出现问题.新安装的游戏将完成零谜题,但玩家A的游戏中心用户已经拥有"解决了5个谜题"的成就.那么我们应该重置玩家A的成就吗?我们是否应该以某种方式自动填充拼图答案,让玩家A的游戏与他的成就保持一致?

在我看来,Game Center模型并没有考虑到这种总体持续进步.(事实上​​,如果游戏有自己的登录系统来管理多个玩家的状态,在我看来,处理多个游戏中心玩家变得更加复杂,因为需要有一种方法来匹配游戏将玩家集中到游戏登录玩家,据我所知,游戏必须提供一些匹配的界面才能使其发挥作用.)

无论如何,这是我对如何处理这个问题的"穷人的版本"的看法; 也就是说,如何使用具有全局持久状态的正常单人游戏(再次,像填字游戏),并使其与游戏中心"足够好"工作:

(1)游戏不会尝试将游戏"同步"到您的游戏中心统计数据.例如,如果您在一台设备上解决了9个谜题,然后在另一台设备上安装游戏并使用相同的游戏中心用户登录,则即使您的游戏中心播放器仍然具有以下功能,新游戏仍将解决零谜题"解决了5个谜题"的成就.

(2)如果你再继续完成5个谜题,没有任何改变,因为你已经获得了这个成就.但是当你完成25个谜题(或者下一个成就等级)时,你将获得新的成就.

(3)假设你(玩家A)已完成9个谜题然后你退出游戏中心而其他人(玩家B)登录同一个设备.在这种情况下,我们将加载玩家B的成就,让我们假设玩家B目前在游戏中没有成就.在富人的版本中,我认为我们应该重置谜题以匹配玩家B的成就.但在穷人的版本中,我们只是立即(并默默地)更新玩家B的成就以匹配游戏状态.所以玩家B会立即获得"解决5个谜题"的成就(即使是"赢得"它的玩家A).

这个穷人版本的底线是:

(a)如果两个或多个玩家在一个设备上登录和退出游戏中心,那么登录玩家当时取得成就的任何人都将获得该成就.如果状态更高,那么在登录时间,玩家的成就将"赶上"游戏的状态.因此,就像所有玩家"共同进步"一样 - 任何一名玩家的任何成就都会被任何其他玩家继承.

(b)如果你在新设备上卸载/重新安装或安装,你就从头开始谜题,但你的成就保持在他们所处的高点,一旦你开始超过这些数字,成就会增加以跟上您.

因此,总而言之,在我看来,任何具有全球持续进步的游戏(冒险游戏,填字游戏)都会面临多个游戏中心玩家的这些问题.在我看来,有两条路可走:正确的方式和穷人的方式.正确的方式似乎很复杂.例如,一个冒险游戏将不得不问用户类似的事情,"我看到你刚刚与一个不同的游戏中心玩家B签约.你想继续游戏并将所有进一步的进展与玩家B联系起来,或者做你想重置游戏,这样玩家B可以从头开始吗?" 然后它必须准备好为任何数量的游戏中心用户保存完整状态(库存,地图等).

这个穷人的解决方案似乎不太理想,但对于现有的游戏来说,只是想在不杀死自己的情况下"坚持"游戏中心的支持,这似乎是一个合理的选择,因为"正常"的用例不是拥有多个游戏中心玩家不断在单个设备上登录和退出.

所以我的问题是:

(a)我对这种情况的分析是否正确?

(b)穷人的解决方案是否已经概述了一个可行的解决方案?它是常用的吗?

multi-user ios game-center

5
推荐指数
1
解决办法
1959
查看次数

如何为所有用户制作GNU-Screen共享1屏幕?

如何启动可作为Root-User和Default-User访问的Screen?因为现在当我使用以下命令启动Screen as Default-User时:

screen -dmS test java $JAR nogui
Run Code Online (Sandbox Code Playgroud)

执行命令并登录Root-User并尝试使用后

screen -x test
Run Code Online (Sandbox Code Playgroud)

它会说,它不存在,因为屏幕是用户绑定的,AFAIK.

那么有一种方法可以将屏幕共享给所有用户吗?所以我可以通过任何用户的屏幕名称附加屏幕.

linux shell centos gnu-screen multi-user

5
推荐指数
1
解决办法
5604
查看次数

如果有太多的打开连接,我怎样才能获得php pdo代码以继续重试连接?

我有一个问题,它现在才出现.我在共享的Web托管计划中,最多有10个并发数据库连接.Web应用程序有几十个查询,一些pdo,一些mysql_*.

加载一个页面特别是在5-6个并发连接处达到峰值意味着它需要至少2个用户同时加载它以在其中一个或两个上发出错误.

我知道这是低效的,我确信我可以减少相当多,但这就是我的想法是将pdo代码移动到一个函数中,只传递一个查询字符串和一个变量数组,然后让它返回一个数组(部分是为了整理我的代码).

实际问题:

如何让这个函数继续重试,直到它设法执行,并保持调用它的脚本(以及任何可能调用该脚本的脚本),直到它设法执行并返回它的数据为止?我不希望事情执行不正常,我很高兴代码在高峰时间被延迟一秒左右

由于有人会要求代码,这就是我现在所做的.我在自己的文件中有这个,所以我有一个更改连接参数的中心位置.if语句只是为了在我从测试服务器切换到肝脏服务器时不再需要不断更改参数

$dbtype = "mysql";
$server_addr = $_SERVER['SERVER_ADDR'];
if ($server_addr == '192.168.1.10') {
    $dbhost = "localhost";
} else {
    $dbhost = "xxxxx.xxxxx.xxxxx.co.nz";
}
$dbname = "mydatabase";
$dbuser = "user";
$dbpass = "supersecretpassword";
Run Code Online (Sandbox Code Playgroud)

我'在函数顶部包含'该文件

 include 'db_connection_params.php';
        $pdo_conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
Run Code Online (Sandbox Code Playgroud)

然后在一个连接上运行这样的命令

$sql = "select * from tbl_sub_cargo_cap where sub_model_sk = ?";
$capq = $pdo_conn->prepare($sql);
$capq->execute(array($sk_to_load));
while ($caprow = $capq->fetch(PDO::FETCH_ASSOC)) {
//stuff
}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo multi-user

5
推荐指数
1
解决办法
4118
查看次数

如何通过网络查看谁在使用我的Access数据库?

我其实有两个问题:

1.我怎么知道谁在使用我的Access数据库?

  • 例如:有人打开了Access数据库并创建了.ldb文件,我想查看谁打开该数据库的列表(可能不止一个人).

2.我怎样才能看到谁在使用链接表?

  • 例如:我有10个不同的Access数据库,并且所有这些数据库都使用相同的链接表.我想看看谁在使用该链接表.

我甚至不知道它是否真的可能,但我非常感谢你的帮助!

为您提供信息:主要问题是很多人在同一个网络驱动器中使用相同的Access,因此当我需要更改它时,我必须全力以赴,但我永远不知道谁在实际使用它.

ms-access multi-user ms-access-2003

5
推荐指数
2
解决办法
4万
查看次数

Android多用户行为:如何为所有用户安装应用程序包

我正在探索有关 PackageManager 的Android 多用户行为。\nI\xe2\x80\x99m 试图了解如何在每个用户中安装软件包以及如何在所有用户中实现安装。

\n

找不到为所有用户安装软件包的方法,只能为当前用户安装软件包。使用我的示例应用程序在 Android 11 模拟器 (AOSP) 中进行测试,该应用程序使用 PackageInstaller 安装软件包。

\n

我能够测试什么:

\n
    \n
  • 将我的示例应用程序作为系统应用程序,因此它将具有安装和删除包的受限权限,并且它将显示在每个用户中
  • \n
  • 创建新用户并在它们之间切换
  • \n
  • 列出当前用户安装的所有应用程序包
  • \n
  • 使用我的示例应用程序,为当前用户安装包。我正在使用PackageInstaller.Session来成功实现这一目标。
  • \n
  • 使用用户 A 安装软件包 X,切换到用户 B,我在应用程序中看不到软件包 X,但是我能够在用户 B 上安装相同的软件包 X
  • \n
  • 无法安装同一软件包(相同软件包名称)的较低版本。(在用户 A 上安装软件包 X,verCode=2,切换到用户 B 并尝试安装软件包 X,verCode=1)。不过我可以安装 vercode >= 的软件包
  • \n
  • 用户 B 看不到用户 A 安装的内容
  • \n
  • 在 Android Studio (AS) 设备资源管理器的帮助下,我能够找到位于此处的已安装包元数据 (apk):/data/app/[一些奇怪的哈希值]/[应用程序的包名称]
  • \n
  • 在 AS 设备资源管理器的帮助下,我能够找到专用于每个用户的每个包的数据文件夹:/data/user/[用户 ID]/[应用程序的包名称]
  • \n
\n

据我所知,我只是参考我在官方 Android 文档中找到的内容,我找不到一种以编程方式在所有用户中安装软件包的方法。另外,我找不到列出设备中安装的所有软件包的方法(不是在当前用户中,而是在设备中)。

\n

既然您知道了我的调查状况,也许有人可以帮助我提供一些官方声明或解决方法。

\n

1. 有没有办法(以编程方式)列出设备中所有已安装的软件包,而不依赖于当前用户?

\n

2. …

installation android multi-user android-source apk

5
推荐指数
0
解决办法
1830
查看次数