6

我现在正在开发一个应用程序,它在应用程序范围内创建并存储与本地 XMPP 服务器的连接。连接方法存储在 cfc 中,确保每次使用 Application.XMPPConnection 时都已连接并获得授权,并利用该连接向用户发送实时事件。据我所知,这工作正常。但它尚未在任何压力下进行测试。

我的问题是:这个设置会在以后引起问题吗?我之所以问,是因为我找不到其他人以这种方式使用应用程序变量的证据。如果我不使用 railo,我会使用 CF 的事件网关来完成相同的任务。

4

2 回答 2

7

尺寸本身不是问题。如果你要为每个请求初始化一个对象,你会消耗更多的内存。问题是访问。

如果您有大量请求竞争同一个对象,则需要测量该对象与实例化的访问时间。请记住,对于数据对象,不止一个线程可以读取它们。不过,我的理解是,当一个对象的函数被调用时,它会将该对象锁定到其他线程,直到函数返回。

此外,如果对象保持状态,您需要考虑当多个线程获取/设置该数据时要做什么。你最终会遇到比赛条件吗?

您可能会考虑在会话范围内处理此对象,以便仅对每个用户进行实例化(可能只会同时发出一两个请求)。

于 2010-05-17T18:59:58.430 回答
3

当然,如果所有用户在应用程序的不同部分使用它们,您可以使用应用程序范围来存储这些组件。现在,可能的问题是:

  1. 组件的大小
  2. 如果在应用程序启动期间设置了这些,则初始化所需的时间
  3. 设置/获取这些组件状态之间的竞争条件

首先,有一些方法可以计算内存中组件的大小。最近有很多关于这个主题的帖子,所以很容易找到一些。如果您没有保存一些大型结构或查询,我想您在这里没问题。

其次,如果您没有使用来自 DB 的一些大型查询或进行一些缓慢的解析来填充此 cfc,那么您在这里也可以。

第三,注意可能的情况,更多的用户正在改变这些组件的状态。如果是这样,请在组件状态的每个设置上使用 cflock。

于 2010-05-17T17:44:14.840 回答