Ajax 在服务器上存储状态的位置

Ajax 在服务器上存储状态的位置,ajax,architecture,chat,Ajax,Architecture,Chat,我正在我的应用程序中开发一个功能,我需要在其中存储两个用户之间的一系列特定操作的状态,就像基于ajax的聊天服务一样 情况如下: 用户可以看到哪些其他用户在线,然后挑战其中一个用户。其他用户接收质询并接受质询。现在两个用户每人都有5个问题,比赛同时开始(几乎同时进行),然后当用户浏览问题或解决问题时,状态也会在另一个用户屏幕上更新 本质上,这与像facebook聊天这样的聊天系统非常相似。我可以看到谁都在线。我给我的朋友发了一条聊天信息,他可以回复我的聊天窗口 我相信所有这些都可以通过使用aja

我正在我的应用程序中开发一个功能,我需要在其中存储两个用户之间的一系列特定操作的状态,就像基于ajax的聊天服务一样

情况如下: 用户可以看到哪些其他用户在线,然后挑战其中一个用户。其他用户接收质询并接受质询。现在两个用户每人都有5个问题,比赛同时开始(几乎同时进行),然后当用户浏览问题或解决问题时,状态也会在另一个用户屏幕上更新

本质上,这与像facebook聊天这样的聊天系统非常相似。我可以看到谁都在线。我给我的朋友发了一条聊天信息,他可以回复我的聊天窗口

我相信所有这些都可以通过使用ajax来实现。我可以轻松地对.asmxwebservices进行ajax调用,并检索特定用户的对象,因为可以在那里访问会话。然而,我想知道在哪里维护状态,因为会话是针对特定用户的,并且我希望我的特定对象能够为两个特定用户访问

我在哪里存储状态?或者以基于Ajax的聊天为例,我应该将User1输入的消息存储在哪里?当User1输入时,该消息如何显示给user2

我正在考虑应用程序对象,但阅读时未建议使用它

对于这种情况,您有什么建议?

如果您试图进行“近实时”的消息传递,您可能想看看HTTP轮询(又称长轮询)。我不会像过去那样使用SQL进行临时消息传递和短期状态转换。如果在单个web服务器上运行,只需将状态保持在会话或ASP.NET缓存中即可。如果在多个web服务器上运行,请查看分布式缓存,如memcached、Velocity(Win 2008)或NCache。然后将缓存的数据提供给正在等待的AJAX请求(因为轮询时间长)。关键设计问题是缓存密钥的设计(没有双关语),它需要包括用户特定事件数据的用户ID


另外,有一些用于大规模、近实时消息分发的框架,可以解决当数百个客户端同时参与长轮询时遇到的扩展问题。这些框架的广义名称是“Comet”,它们在向许多客户端广播相同的消息时最有用。

优点。我已经删除了我的答案(因为你提到过它)。谢谢你的指点。。。我将阅读并尝试这些,然后很快将我的结果发布在这里..一个关于在缓存中存储状态的问题。如果服务器开始耗尽内存,缓存是否会破坏对象以释放内存,在这种情况下,另一个传入请求可能会抛出错误?这是一种可能性吗?在这种情况下,我可以做什么?使用缓存存储消息对于原型来说是可行的,这样您就不必编写“消息过期”逻辑来管理消息的生命周期。在“真正”的应用程序中,您需要管理生命周期(将它们放入队列,并将过期的生命周期从队列的另一端弹出)。