1

私は雰囲気フレームワークで作業しようとしています。データの送受信はかなりうまく機能しますが、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" }));
});

追加情報が必要な場合はお知らせください。ありがとうございます!

4

1 に答える 1

0

どちらの動作も想定されています。

最初のもの ( のような文字列4|text) は、応答の長さを追跡することです (詳細については、こちらを参照してください)。このようにして、クライアントは受信した応答コンテンツが完全であることを検証します。ただし、これを完全に構成するには、サイドのrequestオブジェクトに次のプロパティを追加する必要があります(この場合は)。clientusersUpdateReq

trackMessageLength : true

2 つ目 ( のような文字列1|X) は、サーバーとクライアント間の接続を維持するハートビートを表します。詳細はこちらをご覧ください。もちろん、サーバー側とクライアント側で構成できます。

于 2015-07-30T18:48:53.990 に答える