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

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

有帮助吗?

解决方案

尺寸本身不是问题。如果你要初始化每个请求一个对象,你会燃烧大量的内存。问题是访问。

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

此外,如果物体保持状态,你需要考虑当多个线程越来越/设置这些数据做什么。你最终会与竞争条件?

您可以考虑在session范围内处理这个对象,所以它只是每个用户(谁,有可能的,只会让一个或两个同时请求)实例化。

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top