Atmosphere jQuery responseBody 总是以长度管道“5|”开头
Atmosphere jQuery responseBody always starts with length pipe "5|"
我正在尝试使用大气框架。
发送和接收数据工作得很好,但我认为 jquery 读取收到的消息时存在一些不兼容或其他问题:
当服务器发回 "Text" 时,就像在我的 TestService.java 代码中一样,jQuery-客户端收到一个 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 class 看起来像这样,我认为它工作正常:
@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 客户端上发送和接收的代码如下所示:
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" }));
});
如果您需要更多信息,请告诉我。谢谢大家!
这两种行为都是预期的。
第一个(像 4|text
这样的字符串)是跟踪您的回复的长度(查看更多信息 here)。这样客户端将验证收到的响应内容是否完整。但是,要完全配置它,您需要将以下 属性 添加到 client
端的 request
对象(在您的情况下 usersUpdateReq
):
trackMessageLength : true
第二个(像1|X
这样的字符串)代表心跳,保持服务器和客户端之间的连接。查看更多信息 here. And of course you can configure it in the server and client side。
我正在尝试使用大气框架。 发送和接收数据工作得很好,但我认为 jquery 读取收到的消息时存在一些不兼容或其他问题:
当服务器发回 "Text" 时,就像在我的 TestService.java 代码中一样,jQuery-客户端收到一个 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 class 看起来像这样,我认为它工作正常:
@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 客户端上发送和接收的代码如下所示:
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" }));
});
如果您需要更多信息,请告诉我。谢谢大家!
这两种行为都是预期的。
第一个(像 4|text
这样的字符串)是跟踪您的回复的长度(查看更多信息 here)。这样客户端将验证收到的响应内容是否完整。但是,要完全配置它,您需要将以下 属性 添加到 client
端的 request
对象(在您的情况下 usersUpdateReq
):
trackMessageLength : true
第二个(像1|X
这样的字符串)代表心跳,保持服务器和客户端之间的连接。查看更多信息 here. And of course you can configure it in the server and client side。