不断更新聊天消息

时间:2011-01-02 23:04:38

标签: c# asp.net

我正在创建一个非常简单的聊天应用程序。它有一个ASP.NET网页作为前端,WCF服务作为后端,用于将消息存储到数据库。

除了一件事,一切都很好;当浏览器A输入聊天消息时,我希望浏览器B尽快看到消息(是的,我知道,这是聊天的目的)。

到目前为止,我所做的是在UpdatePanel中设置一个触发器,如下所示:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="chatTimer" EventName="Tick" />
</Triggers>

使用计时器:

<asp:Timer ID="chatTimer" runat="server" OnTick="chatTimer_Tick" Interval="1000" />

这是最好的方法还是有更好,更简单的方法来完成消息的更新。此解决方案的一个缺点是,每次Tick事件运行时,用于输入聊天消息的文本框都会失去焦点。

对于有关更新消息的任何反馈或建议表示赞赏。

谢谢!

3 个答案:

答案 0 :(得分:2)

由于HTTP协议不支持服务器推送,因此您必须轮询服务器以进行更改。有不同的方法,但它们都与你正在做的相似。

您可以通过设置UpdateMode="Conditional"来更新您的更新面板,这样就不会在每个计时器时刻更新(并失去焦点)。只有在服务器端调用Update方法才能触发它时,它才会更新。

答案 1 :(得分:2)

Comet是一种用于此类场景的技术。虽然我不会说这很简单。

基本上,客户端将保持对服务器开放的长期连接,然后服务器可以将数据推送到浏览器。

这个问题是相关的:Comet implementation for ASP.NET?

答案 2 :(得分:1)

如果您正在使用WCF,那么只要来自其他客户端的消息到达,服务器就会调用CallbackContract