0

アプリケーションに CometD を実装しようとしています。しかし、私たちのプロジェクトの既存の実装に比べて時間がかかります。既存のシステムではミリ秒単位の時間がかかりますが、CometD ではメッセージのプッシュに 2 秒かかります。

どこが間違っているのかわかりません。どんなガイダンスも私を大いに助けてくれます。

私のコード:

クライアント側の Java スクリプト

  (function($)
{
var cometd = $.cometd;

$(document).ready(function()
{
    function _connectionEstablished()
    {
        $('#body').append('<div>CometD Connection Established</div>');
    }

    function _connectionBroken()
    {
        $('#body').append('<div>CometD Connection Broken</div>');
    }

    function _connectionClosed()
    {
        $('#body').append('<div>CometD Connection Closed</div>');
    }

    // Function that manages the connection status with the Bayeux server
    var _connected = false;
    function _metaConnect(message)
    {
        if (cometd.isDisconnected())
        {
            _connected = false;
            _connectionClosed();
            return;
        }

        var wasConnected = _connected;
        _connected = message.successful === true;
        if (!wasConnected && _connected)
        {
            _connectionEstablished();
        }
        else if (wasConnected && !_connected)
        {
            _connectionBroken();
        }
    }

    // Function invoked when first contacting the server and
    // when the server has lost the state of this client
    function _metaHandshake(handshake)
    {
        if (handshake.successful === true)
        {
            cometd.batch(function()
            {
                cometd.subscribe('/java/test', function(message)
                {
                    $('#body').append('<div>Server Says: ' + message.data.eventID + ':'+ message.data.updatedDate + '</div>');
                });

            });
        }
    }

    // Disconnect when the page unloads
    $(window).unload(function()
    {
        cometd.disconnect(true);
    });

    var cometURL = "http://localhost:8080/cometd2/cometd";
    cometd.configure({
        url: cometURL,
        logLevel: 'debug'
    });

    cometd.addListener('/meta/handshake', _metaHandshake);
    cometd.addListener('/meta/connect', _metaConnect);

    cometd.handshake();
});
})(jQuery);

コメット サービス クラス

    @Listener("/service/java/*")
    public void processMsgFromJava(ServerSession remote, ServerMessage.Mutable message)
    {

    Map<String, Object> input = message.getDataAsMap();
    String eventId = (String)input.get("eventID");
    //setting msg id

   String channelName = "/java/test";
    // Initialize the channel, making it persistent and lazy
    bayeux.createIfAbsent(channelName, new ConfigurableServerChannel.Initializer()
    {
        public void configureChannel(ConfigurableServerChannel channel)
        {
            channel.setPersistent(true);
            channel.setLazy(true);
        }
    });

    // Publish to all subscribers
    ServerChannel channel = bayeux.getChannel(channelName);
    channel.publish(serverSession, input, null);


}

サーバー側のコードを変更する必要があるものはありますか。

4

1 に答える 1

1

チャンネルを遅延させたため、メッセージ ブロードキャストの遅延が予想されます (これが遅延チャンネルのすべてです)。

レイジー チャンネルのドキュメントを参照してください。

すぐにブロードキャストしたい場合は、チャンネルをレイジーに設定しないでください。

于 2013-10-16T13:01:36.190 に答える