私は雰囲気フレームワークで作業しようとしています。データの送受信はかなりうまく機能しますが、jquery が受信したメッセージを読み取るときに、非互換性またはその他の問題があると思います。
サーバーが TestService.java のコードのように「Text」を返すと、jQuery クライアントは responseBody「4|Text」(=> text|text の長さ) を受け取ります。もちろん、番号とパイプを切り取ることもできますが、そもそも何が問題なのかを突き止めようとしています。
したがって、最初にhtmlページをロードすると、「|」だけのアラートが表示されます。次に、送信ボタンをクリックするたびに、「4 | Text」というアラートが表示されます。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 クライアントで送受信するためのコードは次のようになります。
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);
example-request の送信:
$("#sendb").click(function() {
usersUpdateSubSock.push($.stringifyJSON({ name : "TestTest" }));
});
追加情報が必要な場合はお知らせください。ありがとうございます!