通道api GAE通道在打开后立即关闭

时间:2012-04-02 09:32:05

标签: google-app-engine channel-api

首先感谢Moishe的精彩频道API。 我正在运行Google Channel API文档中提供的简单方案。我面临的问题是频道在打开后立即关闭。

/* Client Side */
public class Feed extends HttpServlet {


private static String feed=
   "<html>" +
   "<head>" +
   "<title>Login</title>" +
   "<script type=\"text/javascript\" src="/_ah/channel/jsapi\"></script>" +
   "</head>" +
   "<body>" + 
   "Feed" +
   "<script>" +
   "channel=new goog.appengine.Channel('{{ token }}');" +
   "socket=channel.open();" +
   "socket.onOpen=alert(\"channel opened");" +
   "socket.onMessage=alert(\"New Message\");" +
   "socket.onClose=alert(\"Socket Closed\");" +
   "socket.onError=alert(\"Error\");" +
   "</script>" +
   "</body>" +
   "</html>";"

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

    ChannelService channelservice=ChannelServiceFactory.getChannelService();
    String token=channelservice.createChannel("sample");
    feed = feed.replaceAll("\\{\\{ token \\}\\}", token);
    res.setContentType("text/html");
    res.getWriter().write(feed);
 }

}

/* Server Side*/

public class QuestAsk extends HttpServlet{

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
    {
        ChannelService channelService=ChannelServiceFactory.getChannelService();
        channelService.sendMessage(new ChannelMessage("sample","sample message"));
    }
 }

我向Feed发出GET请求。

那时我看到频道打开后接收到未定义的消息 - >频道关闭 - >频道错误。

显然,我在这里忽略了一些东西。如果有人可以指出,我将非常感激。谢谢你的帮助。

最好的问候

JR

1 个答案:

答案 0 :(得分:1)

我看到两个问题:

首先,onopen等没有大小写,因此你在socket中分配了错误的值。你应该使用socket.onopen,socket.onmessage,socket.onclose和socket.onerror。

其次,您将调用alert()的结果分配给socket.onOpen等。而是要为这些函数分配函数,所以你应该做这样的事情:

socket.onopen = function() {alert('Channel opened.');};
// etc

我相信这会修复您的代码。