我正在尝试在网络上实现自定义实时聊天程序,但我不确定如何处理用户的实时(或接近实时)更新。每隔一秒左右从客户端发送Ajax请求更有意义,轮询数据库以获取新评论吗?
每次添加评论时,有没有办法以某种方式从数据库广播?如果可能的话,那怎么办?我正在使用带有Asp.net的Sql Server 2008(c#)。
谢谢!
答案 0 :(得分:2)
您可以让每个客户端轮询服务器,并在服务器端保持连接打开而不响应。
一旦在服务器端检测到消息,就会通过已打开的连接返回此数据。收到后,您的客户会立即发出新请求。
由于您需要跟踪服务器端哪些连接与哪个会话相关联,以及哪些会话应该响应以防止超时,因此存在一些复杂性。
我从来没有真正这样做,但这应该是资源效率最高的方式。
答案 1 :(得分:2)
使用长轮询/服务器端推/彗星:
http://en.wikipedia.org/wiki/Comet_(programming))
另见: http://en.wikipedia.org/wiki/Push_technology
我认为当您使用长轮询时,您还希望您的Web服务器以非阻塞io的形式为请求提供一些支持,这样您就不会为每个连接保留一个线程。
答案 2 :(得分:0)
不。使用像RabiitMq或ActiveMQ这样的排队系统。检查mongoDB。
排队系统会给你一个发布 - 订阅设施。