【问题标题】:Closing Channel with Google Channel API使用 Google Channel API 关闭频道
【发布时间】:2014-09-29 07:05:06
【问题描述】:

我使用 GWT 和 Java 编写了 Google Channel API 的客户端/服务器实现。我在 Internet 和 Channel API 中查看了所有内容,以了解如何在使用完 Channel 后关闭它(每个用户一次只能打开一个通道,所以这对我的应用程序非常重要) ,但到目前为止我什么也没找到。

有谁知道如何向 Google 发送关闭套接字请求以关闭某个 Channel 的套接字?

【问题讨论】:

    标签: java sockets gwt channel-api


    【解决方案1】:

    显然,互联网上没有人知道(或需要弄清楚)如何做到这一点,所以我只是盯着 API 概述看了足够长的时间,直到它出现。当您创建“socket”变量时,秘密就在 API 的 Javascript 部分。 Javascript API 声明套接字变量也有一个“close()”函数。考虑到我是用 Java 编写实现的,这对我来说有点棘手,因为我不得不抹去我对 JSNI 的了解,并且套接字变量只存在于我的“加入”调用期间。

    为了解决这个问题,我从套接字变量中创建了一个全局变量,在本例中称为“globalSocket”,然后编写了一个单独的 JSNI 关闭函数,该函数在全局套接字变量上调用了“close()”。之后就像一个魅力一样工作。

    private native void join(String channelKey) /*-{
        var channel = new $wnd.goog.appengine.Channel(channelKey);
        var socket = channel.open();
        $wnd.globalSocket = socket;
        var self = this;
    
        socket.onmessage = function(evt) {
            var data = evt.data;
            self.@com.divint.roo.client.Channel::onMessage(Ljava/lang/String;)(data);
        };
    
        socket.onopen = function() {
            self.@com.divint.roo.client.Channel::onOpen()();
        };
    
        socket.onerror = function(error) {
            self.@com.divint.roo.client.Channel::onError(ILjava/lang/String;)(error.code, error.description);
        };
    
        socket.onclose = function() {
            self.@com.divint.roo.client.Channel::onClose()();
        };
    
    }-*/;
    
    private native void close() /*-{
        $wnd.globalSocket.close();
    }-*/;
    

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多