1

我有一个 C 模拟,我正在为其创建一个图形 Web 界面。我使用带有 ajax 的 HTML 来调用 PHP,而 PHP 又调用 shell 来运行模拟。然后将输出传递回网页。

该脚本生成一个输出文件(带有输出到网页的链接)以及一个图形(使用对 gnu plot 的调用并引用输出文件)。该网页还允许用户上传用于 C 语言仿真的输入文件。所有这些文件都是用户特定的。

如果网页上一次只有一个用户,则没有任何问题。但是,如果 5 个人想同时运行模拟,用户特定的文件(输出、图形、输入)都会被覆盖和弄乱。

我没有任何 MySQL 经验,我也不打算为给定用户保存输出或输入(如果他/她愿意,用户可以下载它们),所以我希望可能有一个相当简单的解决方案,比如,例如,在服务器上生成一个临时目录,该目录根据用户的 IP 地址或其他名称在名称中带有某种识别标签。然后可以在模拟运行几分钟后删除此文件夹。有人对这样的事情有任何想法吗?

还是我必须求助于 MySQL?

编辑:也可以允许最多 5 个用户同时运行,然后为其他用户创建一个队列,但这可能会更加困难。

谢谢,乔什

4

3 回答 3

2

如果不将输出保存在某处,您将无法做到这一点,因此您的临时目录计划很好。

  • 通过 md5() 或 sha1() 或其他方式为每个新用户分配一个唯一的 ID。
  • 将 id 传递给模拟器并让它在由该 id 命名的子目录中创建其输出文件。
  • 根据该 ID 渲染链接和图像 HREF。
  • 编写一个 cron 来定期清除陈旧的子目录。

每个人都会在一个不可猜测的 URL 上获得自己的输出集。

于 2012-07-23T19:43:55.763 回答
1

也许你可以在你的 C 模拟中使用线程。或者,您可以设置 MySQL 数据库并使用PHP 数据库对象 (PDO)将数据存储在那里。如果您可以使用 C 并且能够使用 PHP 进行 ajax,则 mysql 可能是最省时的解决方案,而不是 C 中的线程(假设 C 模拟相对复杂)

于 2012-07-23T19:38:56.650 回答
1

您可以为访问用户创建会话标识符,并将该 id 作为参数传递给您的 c 程序。

当您的 c 程序创建文件供用户显示时,它应该使用您的会话标识符为该用户生成名称。

从网页让用户查看与其会话标识符匹配的文件。这样他们可以看到他们生成的文件,如果他们有一个带有会话标识符的文件,您也可以为用户设置一个控件,您不需要对您的 c 程序进行不必要的调用。

只需服务已经创建的那个。根据需要控制该标识符的生命周期。

于 2012-07-23T19:44:24.203 回答