我试图使用大气框架。 发送和接收数据工作得很好但我认为当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" }));
});
如果您需要其他信息,请与我们联系。谢谢大家!
答案 0 :(得分:0)
这两种行为都是预期的。
第一个(4|text
之类的字符串)用于跟踪回复的长度(请参阅更多信息here)。这样,客户端将验证收到的响应内容是否完整。但是,要完全配置此功能,您需要将以下属性添加到request
方({case 1 {{}}}中的client
对象中:
usersUpdateReq
第二个(像trackMessageLength : true
这样的字符串)表示保持服务器和客户端之间连接的心跳。查看更多信息here。当然,您可以在server和client side。