【问题标题】:Client side message functionality客户端消息功能
【发布时间】:2010-08-24 13:50:46
【问题描述】:

导致站点从服务器端更改内容的错觉是如何实现的?让示例为 gmail 聊天或在 facebook 上聊天。甚至新消息在堆栈溢出时签名。

http://en.wikipedia.org/wiki/Comet_(programming))做的吗?

感谢您的帮助

【问题讨论】:

  • 首先你需要提出一个没有那么多“东西”的规范,然后它就是快乐的黑客。呃,我的意思是,你能对你的要求更具体一点吗?什么数据库?谁的数据库?有人会如何向您发送消息?
  • @Dave Swersky:他在问“网页如何给人一种它正在接收未经请求的消息的错觉?”
  • 您提供的*链接无法解析为文章。你什么意思?

标签: c# javascript asp.net ajax


【解决方案1】:

这类事情通常是通过一个 JavaScript 块根据计时器一次又一次地触发来完成的。它将检查数据库中事物的状态并调整标记中的某些内容。例如,更改某些元素的 CSS 类以引入不同的颜色或粗体字体,用更亮的颜色替换图片等。真的很简单。不涉及魔法。

【讨论】:

  • 仅此而已?这不是一种积极的等待吗?我不喜欢这个主意:/
  • 是的,就是这样。仅此而已。尝试为您想到的具有此功能的任何网站禁用 JavaScript,您会看到他们的通知停止工作。
  • @snorlaks:没有其他方法可以通过 javascript 数据轮询来回答您的问题,如果您不喜欢这个想法,那就太糟糕了!
  • @snorlaks:您的“异步”要求是指 javascript/JQuery。查找 AJAX 和任何其他基于 Web 的异步技术,都是 javascript。
  • 我知道肯定还有其他方法:en.wikipedia.org/wiki/Comet_(programming)
【解决方案2】:

客户端必须“轮询”服务器以进行更改。即基于计时器的 Ajax 调用,每 15 秒检查一次服务器是否有新数据,并根据结果采取行动。

非常松散的例子:

setTimeout('checkMessages()',15000);

function checkMessages() {
    //using jquery
    $.get( .......... , function (data) { if (data == "newmsg") { $('#newmsgind').blink(); });
    setTimeout('checkMessages()',15000);
}

Web 浏览器并不真正维护与服务器的连接。你拉一页,就是这样。 Ajax 允许持续的异步通信,但总是由客户端发起。

【讨论】:

  • 那么在您看来,例如 gmail 上的 google 聊天就是这样制作的?
  • 我确信实现更加健壮和进化,但是是的。
  • 客户端帽子投票不是真的:看看这个:en.wikipedia.org/wiki/Comet_(programming)
  • @snorlaks,如果你阅读这篇文章,你会发现它总是涉及到客户端的轮询。
【解决方案3】:

如果您真的不喜欢 javascript 方法,您可以编写一个 Java 小程序,按照您喜欢的方式工作,保持与服务器的开放连接。但对于通常是轻量级的问题,这是一个重量级的解决方案。

【讨论】: