我成功地做出了一个简单而小巧的例子,它集成了Spring MVC和Atmosphere框架。它工作得很好,但它的行为方式我不明白:大气与Spring MVC框架的集成:
在我的尝试示例中,我试图广泛每隔10秒广播Date
字符串,所以如果我在10:10:20启动我的应用程序,下一条消息将是10:10:30等....
但代替它我在这段时间内有4个回调,所以我的消息流如下所示:10:10:20,10:10: 21,10:10:22,10:24,10:30。这种行为会以相同的时间间隔顺序发生:
为什么我在10秒内有4次回调,而不是每10秒钟有一次回调?
我的相关代码:
@RequestMapping(value="/websockets", method=RequestMethod.GET)
@ResponseBody
public void websockets(final AtmosphereResource<HttpServletRequest,HttpServletResponse> event) {
final HttpServletRequest req = event.getRequest();
final HttpServletResponse res = event.getResponse();
event.suspend();
final Broadcaster bc = event.getBroadcaster();
bc.scheduleFixedBroadcast(new Callable<String>() {
public String call() throws Exception {
return (new Date()).toString();
}
}, 10, TimeUnit.SECONDS);
}
,并在我的客户端代码我做了以下内容:
<script type="text/javascript">
$(document).ready(function() {
var callbackAdded = false;
function callback(response)
{
$.atmosphere.log('info', ["response.state: " + response.state]);
$.atmosphere.log('info', ["response.transport: " + response.transport]);
if (response.transport != 'polling' && response.state != 'connected' && response.state != 'closed') {
$.atmosphere.log('info', ["response.responseBody: " + response.responseBody]);
if (response.status == 200) {
var data = response.responseBody;
if (data) {
$("#date").text(data);
}
}
}
}
$.atmosphere.subscribe("websockets",
!callbackAdded? callback : null,
$.atmosphere.request = {transport: 'websocket'});
connectedEndpoint = $.atmosphere.response;
callbackAdded = true;
});
</script>
问题是:我的web服务器运行在代理之后。我正在使用System.setProperty(“http.proxyHost”,“代理”); System.setProperty(“http.proxyPort”,“80”);设置代理。现在,即使浏览器无法显示来自Web服务器的信息,它也能正常工作。 – vasim
嗨,我是新的气氛。我想在Spring 3中实现氛围。我不知道如何配置它。春季3没有任何适当的配置氛围指导。我已经在客户端实现了atmospehere的控制器方法和jquery,就像你一样。现在它显示类似org.springframework.beans.BeanInstantiationException的错误:无法实例化bean类[org.atmosphere.cpr.AtmosphereResource]:指定的类是一个接口。如果你能帮我配置它。 –
我不知道如何配置web.xml和spring-servlet.xml来配置气氛。我有同样的要求(在网页上显示每5秒钟的时间),因为你有。 –