0

我正在为我的项目使用 java 和 jsp。我开发了一个类似 facebook 的通知图标。我正在通过 jQuery 进行 servlet URL 调用。Servlet 检查 DB 中的值并返回结果。此调用间隔为 1 秒。前任。-

<div id="noti_Container">
    <a href="layoutMailbox.jsf"> 
        <img src="#{resource['images:Network.png']}"
        alt="Notifications" style="width: 25px;" />
</a>

<div id="check" class="noti_bubble">2</div>
    <script>
        var int=self.setInterval(function(){clock()},1000);
        function clock()
        {
            $.get('Servlet URL', function(responseText) {
                    document.getElementById("check").innerHTML = responseText;
                    });
        }
    </script>
</div>

但这可能是一种“繁重”的方法,因为它每秒 ping 一次 Servlet 并进行 DB 交互。

如果数据库得到更新,是否有任何替代更新通知计数的方法?

4

2 回答 2

1

您可以查看 ajax 推送解决方案,例如cometDwebsocket ( socket.io )。使用它,如果数据库更改而不是合并更改,您将“推送”数据到 Web 浏览器。就我个人而言,我尝试了 websocket 并取得了不错的效果,但浏览器支持可能存在问题。

编辑:

查看这篇关于长轮询的文章。刚刚碰到关于使用JSR 356 (WebSocket) 的文章。stackoverflow 上有类似的问题:如何实现类似 facebook 的通知?

于 2013-08-13T10:54:07.327 回答
1

如果您确定只有 Java-Webapp 仅连接到 SQL-Database,则最好使用java.util.Observable和他的 GoF-Pattern,而不是向 SQL-Server 询问您在最后 1 秒内添加的值。

你也不应该使用$.get. 请用

function clock() {
  $('#check').reload('Servlet URL');
}
var int=self.setInterval(clock, 1000);

因为您正在通过 url 重新加载元素。开销不是必需的。

于 2013-08-13T10:57:37.463 回答