Coldfusion 在应用程序变量中存储大型对象(例如java组件)可以吗?

Coldfusion 在应用程序变量中存储大型对象(例如java组件)可以吗?,coldfusion,railo,cfwheels,cfml,Coldfusion,Railo,Cfwheels,Cfml,我现在正在开发一个应用程序,它在应用程序范围内创建并存储到本地XMPP服务器的连接。连接方法存储在cfc中,该cfc确保每次使用Application.XMPPConnection时都连接并授权该连接,并利用该连接向用户发送实时事件。据我所知,这很好用。但它还没有在任何压力下测试过 我的问题是:这种设置以后会不会导致问题?我之所以这样问,是因为我找不到其他人以这种方式使用应用程序变量的证据。如果我没有使用railo,我将使用CF的事件网关来完成相同的任务。当然,如果应用程序的不同部分中的所有用户

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


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

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

  • 组件的大小
  • 如果在应用程序启动期间设置了初始化所需的时间
  • 设置/获取这些部件状态之间的竞速条件
  • 第一种方法是计算内存中组件的大小。最近有很多关于这个话题的帖子,所以很容易找到一些。如果你没有保存一些大的结构或查询,我想你在这里没问题

    第二,同样,如果您没有使用来自DB的一些大型查询填充这个cfc,或者没有执行一些缓慢的解析,那么在这里您也可以


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

    大小本身不是问题。如果每个请求初始化一个对象,则会消耗更多内存。问题是访问

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

    此外,如果对象维护状态,则需要考虑当多个线程正在获取/设置该数据时要做什么。你会以比赛条件结束吗


    您可以考虑在会话范围内处理这个对象,以便它只对每个用户进行实例化(谁可能只会生成一个或两个同时请求)。p> 谢谢你的回答。我可能需要考虑多线程访问对象的场景,但我认为它现在设置的方式相当不错。存储在应用程序范围中并在所有用户之间共享的唯一对象是XMPP连接对象(由Smack库创建)。它需要向本地openfire服务器发送非常快速的xmpp命令。在这种情况下,标签会有帮助吗?想象一下,500个请求排队等待单个连接释放。(如果您使用cflock。)取决于各种因素,这可能会造成巨大的瓶颈。即使没有使用cflock(它大部分已经过时),自MX(6)以来,CF是线程安全的。读取同一数据位置的多个线程不必等待,但调用函数将导致它们排队。至少,这是我的理解。Ben,这很有趣(函数调用锁定)。你会有更多的资源来解释这个问题吗?@DustMason-关于这个类的图书馆文档是怎么说的?换句话说,单个XMPPConnection是否打算由多个用户/线程使用。。?