4

私は CometD を初めて使用します。応答/要求モデルの場合にサービス チャネル モデルを実装する簡単な例はありますか。私は cometd.org を見たことがありますが、チャネルに公開した場合に応答を返す方法の例はありません。

これはクライアント側です

alert("channel published1");
    dojox.cometd.publish('/service/getlist');   
    alert("channel published");
    dojox.cometd.subscribe('/service/getlist', function(message) {
        alert(message);
    });

これはサーバー側の「ConfigurationServlet」です

bayeux.createIfAbsent("/service/getlist", new ConfigurableServerChannel.Initializer() {

        //new EchoService(bayeux);
        @Override
        public void configureChannel(ConfigurableServerChannel channel) {
            /*channel.setPersistent(true);
            GetListChannelListener channelListner = new GetOrderListChannelListener();
            channel.addListener(channelListner);*/
            new EchoService(bayeux);
        }
    });

エコーサービス

public class EchoService extends AbstractService{
public EchoService(BayeuxServer bayeuxServer)                                 
{
    super(bayeuxServer, "getlist");                                              
    addService("/service/getlist", "processEcho");                                       
}

public void processEcho(ServerSession remote,Map<String, Object> data)
{       
    try{
    System.out.println("Start Process Echo");
    getBayeux().getChannel("/service/getlist").publish(getServerSession(), "Hello", null);
    System.out.println("End Process Echo");
    }catch(Exception exp){
        exp.printStackTrace();
    }
    //remote.deliver(getServerSession(), "/service/getlist", data, null);                  
}

}

4

1 に答える 1

4

http://cometd.orgには、必要なものがすべて揃っています。

非常に単純な例 (Javascript クライアントを使用した Web アプリケーション) を構築するには、特に以下を読む必要があります。

  • これはクライアント側の
  • これはサーバー側(構成)用です
  • これはサーバー側 (コード) 用です。このメニューから、最初と 3 番目の箇条書きを使用して開始することをお勧めします。入力されたメッセージをエコーするコードの継承されたサービスと、構成サーブレットを介した Bayeux サーバーのセットアップのためのサーバー サービスの統合。

私がリンクしたページには、必要なすべてのコードがあります。コピーして貼り付けるだけです。場合によっては、より具体的な質問をして戻ってきてください。


編集済み

コードを確認したところ、サービス構成の場合は ConfigurationServlet クラスのコードをここからコピーする必要があり、EchoService クラスの場合は processEcho メソッドを次のように変更する必要があることがわかります。

remote.deliver(getServerSession(), "/echo", data, null);

here でdata説明されているように定義された HashMapです(最初の例)。

クライアント側では、リクエストを公開する前にチャンネルを購読します(それがあなたのやり方で機能するかどうかはわかりません)

于 2011-12-12T18:21:29.560 に答える