1

GWT を使用した appengine チャネル API の経験がある人はいますか? 私はgooglecodeで提供されている簡単な「ハウツー」に従っています。私の質問は、GWT で channelKey (以下のコードのトークン変数) を取得するにはどうすればよいですか? セッションごとにサーバーから channelKey を取得するには、RPC を使用する必要があると想定しています。これは正しいです?channelId だけを使用できることを望んでいましたが、そうではないようです。また、最高の回答は、dance-dance-robot の例以外の GWT +channel api の実際のサンプル コードを提供できる人に授与されます。サンプル コードやチュートリアルを一生懸命探しましたが、何も見つかりませんでした。

次のコードが実行され、onError メッセージが表示されます。「トークン」は、サーバー コードによって生成される channelKey であると想定しています。これは正しいです?

GWT クライアント コード:

ChannelFactory.createChannel(token, new ChannelCreatedCallback() {
  @Override
  public void onChannelCreated(Channel channel) {
channel.open(new SocketListener() {
  @Override
  public void onOpen() {
    Window.alert("Channel opened!");
  }
  @Override
  public void onMessage(String message) {
    Window.alert("Received: " + message);
  }
  @Override
  public void onError(SocketError error) {
    Window.alert("Error: " + error.getDescription());
  }
  @Override
  public void onClose() {
    Window.alert("Channel closed!");
  }
});

} });

Appengine サーバー コード:

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.channel.ChannelMessage;
import com.google.appengine.api.channel.ChannelServiceFactory;

@SuppressWarnings("serial")
public class SendChannelMsg extends HttpServlet {
    private final String CHANNELNAME = "test";
    private static String channelKey;

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
                    throws IOException {


            if (channelKey == null) {
                    channelKey = ChannelServiceFactory.getChannelService()
                                    .createChannel(CHANNELNAME);
            }

            String ret = "";

            String command = req.getParameter("command");
            if (command.equals("join")) {
                    ret = channelKey;
            } else if (command.equals("send")) {
                try{
                    ChannelServiceFactory.getChannelService()
                                    .sendMessage(
                                                    new ChannelMessage(channelKey, req
                                                                    .getParameter("message")));
                } catch(Exception e){
                         resp.getWriter().println("error "+e.getMessage());

                    }
            }

            resp.getOutputStream().write(ret.getBytes());
    }

}

4

1 に答える 1

0

いいえ。この場合のトークンはあなたによって生成され、このチャンネルの一意の識別子である必要があります。また、ユーザー間でこのトークンを共有する責任があります。

たとえば、チャット ルームを作成する場合、チャット ルームに関連するトークンを作成し、チャット ルーム (関連するトークンを持つ) についてユーザーに通知する必要があります。

于 2011-09-03T08:33:23.003 に答える