【问题标题】:onmessage Google App Engine (Java) Channel APIonmessage Google App Engine (Java) 频道 API
【发布时间】:2012-06-08 08:27:44
【问题描述】:

我正在尝试使用 Google App Engine 的 Channel API。

JavaScript/JQuery:

$(document).ready(function(){
    alert('ready');

    $.post('/token', function(data) {
        alert('token:' + data['token']);
        openChannel( data['token'] );
    });

    $.post('/chat', function(data) {
        alert('chat:' + data['users'].length);
    });

});


onMessage = function(message) {
    alert(message);
}

onSocketError = function(error){
    alert("Error is <br/>"+error.description+" <br /> and HTML code"+error.code);
};

onSocketOpen = function() {
    // socket opened
};

onSocketClose = function() {
    alert("Socket Connection closed");
};

openChannel = function(token) {
    alert('open channel');
    var channel = new goog.appengine.Channel( token );
    var socket = channel.open();
    socket.onopen = onSocketOpen;
    socket.onmessage = onMessage;
    socket.onerror = onSocketError;
    socket.onclose = onSocketClose;
};

问题是 alert(message) 没有触发。我的代码有什么运气?

我对一些在服务器端使用 "\\{\\{ token \\}\\}" 而在 JavaScript 中使用 channel = new goog.appengine.Channel('{{ token }}') 的示例感到困惑。

{{ }} 中包含什么?

【问题讨论】:

  • 在示例中,javascript 中的“{{ token }}”标识符意味着通过 template.render 函数服务器端扩展为值。您的“/token”处理程序中发生了什么?

标签: java google-app-engine channel-api


【解决方案1】:

请注意,token 是标识您的页面的 TOKEN KEY。首先在页面中初始化令牌,例如:

 ChannelService channelService = ChannelServiceFactory.getChannelService();
 String token = channelService.createChannel("sample");

现在

var token ="<%=token %>";// This will creaete unique identifier(some id created by google api + ur key)

channel = new goog.appengine.Channel('<%=token%>');    
    socket = channel.open();    

    socket.onopen = function () {
        var connected = true;  
        sendMessage('<b>'+userName+'</b> Logged in.');
    };

.. 像这样创建函数

【讨论】:

    【解决方案2】:

    除了使用正确的令牌外,您的 onMessage 函数不会触发,因为当您从服务器向客户端发送消息时会发生这种情况:

    channelService.sendMessage(new ChannelMessage(channelKey, "Hello World"));
    

    您可以设置一个XMLHttpRequest,以便从客户端与服务器端进行通信,之前的java代码可以在服务器端运行,例如:

    sendMessage = function(path, param) {   
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'path + '&' + param', true);
        xhr.send();
    };
    

    【讨论】:

      【解决方案3】:

      在 JavaScript 中

       function onMessage(msg) 
                 {
        var msg1=msg.data;
        $('textarea').val($('textarea').val()+msg1);
      
          }
      

      在后台

       ChannelService channelService = ChannelServiceFactory.getChannelService();
       channelService.sendMessage(new ChannelMessage(clientid,message));
      

      【讨论】:

        猜你喜欢
        • 2012-01-06
        • 2014-08-23
        • 2012-06-28
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        相关资源
        最近更新 更多