0

しばらくして、私はGoogle Channel API作業の最初の部分を手に入れました。JavaScriptクライアントからサーバーへのメッセージの送信に問題があります。Google Channel API接続用のサーブレットは次のとおりです。

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    if (user != null) {
        ChannelService channelService = ChannelServiceFactory.getChannelService();
        String token = channelService.createChannel(user.getUserId());

        FileReader reader = new FileReader("index.html");
        CharBuffer buffer = CharBuffer.allocate(16384);
        reader.read(buffer);
        reader.close();

        String index = new String(buffer.array());
        index = index.replaceAll("\\{\\{ token \\}\\}", token);

        resp.setContentType("text/html");
        resp.getWriter().write(index);
    } else {
        resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
    }

次のindex.htmlようになります。

<script src="/_ah/channel/jsapi"></script>

<body>
    <script type="text/javascript">
        onOpened = function() {
            alert("opened");
        }

        var token = "{{ token }}";
        var channel = new goog.appengine.Channel(token);
        var handler = {
            'onopen' : onOpened,
            'onmessage' : onMessage,
            'onerror' : function() {
            },
            'onclose' : function() {
            }
        };
        var socket = channel.open(handler);
        socket.onopen = onOpened;
        socket.onmessage = onMessage;

        function sendMessage() {
            // Send JSON object to server   
        }
    </script>
    <h1>Google Test Channel API</h1>
    <form>
        <input type="button" value="Send" onclick="sendMessage();">
    </form>
</body>

アプリケーションをロードするとopenedアラートが表示され、接続が機能していると思います。ここで、誰かがボタンをクリックした場合に、サーバーにメッセージを送信したいと思います。

POSTまたはGETでXMLHttpRequest関数を使用する必要があることを読みました。ただし、新しいURLは渡さず、値を渡すだけです。JSONオブジェクトをサーバーに送信する方法はありますか?

何かのようなもの:

{
    "message": "This is a JavaClient message!"
}
4

3 に答える 3

1

これは、Chanel APIとはあまり関係がありません。これは、サーバーへの標準的なxhrコールバックにすぎません。このような標準コードを使用することも、このようなjqueryなどのライブラリを使用することもできます。

javascriptをJSONに解析する必要がある場合は、JSON.stringify()を使用してください。

サーバーでは、必要に応じてリクエストを処理したり、標準のHTTP経由でクライアントに応答を送信したり、ChanelAPIを使用して元のクライアントだけでなく接続されているすべてのクライアントにメッセージを送信したりできます。

于 2012-09-28T14:05:45.317 に答える
0

Nick JohnsonのチャンネルAPIブログ投稿に精通していますか?

http://blog.notdot.net/2011/07/Using-the-Channel-API-on-App-Engine-for-instant-traffic-analysis

于 2012-09-28T13:55:28.993 に答える
0

AppEngineのChannelAPIは、ほとんどの場合、サーバー->クライアントからメッセージを送信するためだけのものです。これは一方向のチャネルです。

クライアント->サーバーチャネルを構築するのは難しくないので、それは問題ありませんが、自分で構築する必要があります。無料ではありません。クライアント->サーバーメッセージ用に独自のURLを定義してから、XMLHttpRequestを使用してメッセージをそのURLに送信する必要があります。

Channel APIには、サーバーに接続/切断を通知するメカニズムも組み込まれているという小さな例外があります。裏では、これらは事前定義されたURLへのXMLHttpRequestsを使用して行われます(_ah / channel / disconnectなどのようなものだと思います。これらは自動的に呼び出されるため、役に立ちません。いつ呼び出されるかを定義することはできません。 、またはコンテンツ。

そうですね、独自のURLハンドラーを実装し、JSONデータをそのURLに送信するだけです。

于 2012-09-28T14:55:12.473 に答える