0
我已经使用GWT和Java编写了Google Channel API的客户端/服务器实现。我已经在互联网上以及通道API中查找了各个方面,以了解在完成使用时如何关闭频道(每个用户一次只能打开一个频道,所以这对我的应用程序非常重要) ,但到目前为止,我什么也没找到。使用Google Channel API关闭频道
有谁知道如何发送关闭套接字请求到谷歌关闭某个频道的套接字?
我已经使用GWT和Java编写了Google Channel API的客户端/服务器实现。我已经在互联网上以及通道API中查找了各个方面,以了解在完成使用时如何关闭频道(每个用户一次只能打开一个频道,所以这对我的应用程序非常重要) ,但到目前为止,我什么也没找到。使用Google Channel API关闭频道
有谁知道如何发送关闭套接字请求到谷歌关闭某个频道的套接字?
显然,互联网上没有人想出了(或需要弄清楚)如何做到这一点,所以我只是盯着API概述,直到找到我。秘密是在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;
[email protected]::onMessage(Ljava/lang/String;)(data);
};
socket.onopen = function() {
[email protected]::onOpen()();
};
socket.onerror = function(error) {
[email protected]::onError(ILjava/lang/String;)(error.code, error.description);
};
socket.onclose = function() {
[email protected]::onClose()();
};
}-*/;
private native void close() /*-{
$wnd.globalSocket.close();
}-*/;