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