大气jQuery responseBody总是以长度管道开始" 5 |"

时间:2015-07-30 18:33:44

标签: javascript jquery atmosphere atmosphere.js

我试图使用大气框架。 发送和接收数据工作得很好但我认为当jquery读取收到的消息时存在一些不兼容或其他问题:

当服务器发回" Text"就像在我的TestService.java的代码中一样,jQuery-client收到一个responseBody" 4 | Text" (=>文本的长度)。当然我可以删除数字和管道,但我首先试图弄清楚问题是什么。

因此,当我首先加载html页面时,我会收到一条警告说只是" |"。然后,每次我点击发送按钮,我都会收到警报" 4 |文字"。有时在超时2分钟后,我甚至会收到警报" 1 | X"。

atmosphere-runtime version is: 2.2.7
jQuery-Version is: 2.1.4
jquery.atmosphere-version is: 2.2.7-jquery from https://github.com/Atmosphere/atmosphere-javascript

我也尝试了其他版本的组合,但它从未解决过这个问题。

我在Glassfish上遇到了同样的问题,但目前我使用的是WildFly 8.1。 Opera,Firefox和Chromium的问题也是如此。

我的TestService类看起来像这样,我认为它正常工作:

@ManagedService(path="/")
public class TestService {

private final Logger logger = LoggerFactory.getLogger(TestService.class);

@Ready
public void onReady(AtmosphereResource r) {
    logger.info("Resource {} connected", r.uuid());
}

@Message(decoders = {JacksonDecoder.class})
public String onMessage(AtmosphereResource r, Test t) throws IOException {
    logger.info("Message received = " + t.toString());
    return "Text";
}   
}

jQuery-client上的发送和接收代码如下所示:

var socket = $.atmosphere;
var usersUpdateReq = {
    url: '/NewQuiz-web/quiz',
    transport: 'websocket',
    fallbackTransport: 'long-polling',
    contentType: "application/javascript"
};
usersUpdateReq.onMessage = function(resp) {
    if(resp.status === 200) {
    alert("received: >>" + resp.responseBody + "<<");
    console.log(resp.responseBody);
    eval(resp.responseBody);
    }
};
usersUpdateReq.onError = function(resp) {
    alert('Error');
    console.log(resp);
};

var usersUpdateSubSock = socket.subscribe(usersUpdateReq);

发送示例请求:

$("#sendb").click(function() {
    usersUpdateSubSock.push($.stringifyJSON({ name : "TestTest" }));
});

如果您需要其他信息,请与我们联系。谢谢大家!

1 个答案:

答案 0 :(得分:0)

这两种行为都是预期的。

第一个(4|text之类的字符串)用于跟踪回复的长度(请参阅更多信息here)。这样,客户端将验证收到的响应内容是否完整。但是,要完全配置此功能,您需要将以下属性添加到request方({case 1 {{}}}中的client对象中:

usersUpdateReq

第二个(像trackMessageLength : true 这样的字符串)表示保持服务器和客户端之间连接的心跳。查看更多信息here。当然,您可以在serverclient side

中对其进行配置