канал api GAE канал закрыт сразу после открытия - PullRequest
0 голосов
/ 02 апреля 2012

Прежде всего, спасибо Мойше за замечательный Channel 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"));
    }
 }

Я выдаю запрос GET на Feed.

То есть, когда я вижу, что канал открывается, а затемполучено неопределенное сообщение-> канал закрыт-> ошибка канала.

Очевидно, я что-то здесь упускаю.Был бы очень признателен, если кто-то может указать на это.Спасибо за любую помощь.

С наилучшими пожеланиями

JR

1 Ответ

1 голос
/ 02 апреля 2012

Я вижу две проблемы:

Во-первых, onopen и т. Д. Не имеют заглавных букв, поэтому вы присваиваете неверные значения в сокете. Вы должны использовать socket.onopen, socket.onmessage, socket.onclose и socket.onerror.

Во-вторых, вы присваиваете результат вызова функции alert () для socket.onOpen и т. Д. Вместо этого вы хотите назначить функцию для этих функций, поэтому вам следует сделать что-то вроде этого:

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

Полагаю, это исправит ваш код.

...