Spring MVC,最佳实践如何经常轮询服务器

我正在使用以下技术堆栈来处理Web应用程序:Spring,Hibernate,JSP。 我有一项任务是制作用户社交元素之一 - 消息。 作为实现消息系统的标准,我带facebook系统。 关于我面临的问题是每隔1-5秒(我必须采取什么措施?)轮询服务器以检索关于未读消息的信息。 此外,我想轮询服务器检索对话页面上的新消息(如聊天)。 我做了什么:

get count未读消息的示例代码。

服务器端:

@RequestMapping(value = "/getCountUserUnreadMessages", method = RequestMethod.POST)
public @ResponseBody Callable<Integer> getCountUserUnreadMessages(@ActiveUser final SmartUserDetails smartUserDetails) {
    // TODO add additional security checks using username and active user
    return new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {

            Integer countUserUnreadMessages = messageService.findCountUserUnreadMessages(smartUserDetails.getSmartUser());
            while (countUserUnreadMessages == 0) {
                Thread.sleep(1000);
                countUserUnreadMessages = messageService.findCountUserUnreadMessages(smartUserDetails.getSmartUser());
            }
            return countUserUnreadMessages;
        }
    };
}

客户端:

(function poll(){                                                  
    setTimeout(function () {                                       
        $.ajax({                                                   
            type: "post",                                          
            url: "/messages/getCountUserUnreadMessages",           
            cache: false,                                          
            success: function (response) {                         
                $("#countUnreadMessages").text(response);          
            }, dataType: "json", complete: poll, timeout: 1000 }); 
    }, 3000);                                                      
})();    

因此,客户端发送一个请求,每秒钟以3秒的时间间隔检索计数未读消息(这是一个很好的决定?)。

但我认为这是有史以来最差的可调代码:-P

告诉我如何做得更好? 什么技术使用?

附加信息:是的,我认为这将是高负荷,许多用户在互联网服务。


试试Spring 4 WebSocket支持:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

WebSockets支持通过HTTP建立的专用TCP连接进行全双工通信。


如果你希望这个应用程序必须扩展,我会更像每30到90秒做一次这个时间间隔。 否则,你基本上会设计自己的内置DOS攻击你自己。

您可能会考虑Spring套接字。 这听起来像是长时间轮询选项可能对你更好。

链接地址: http://www.djcxy.com/p/74513.html

上一篇: Spring MVC, best practice how to often polling server

下一篇: Poll database every second and start n long running tasks