Actionscript 3 Firebase:onDisconnect方法背后正在做什么?(AS3)

Actionscript 3 Firebase:onDisconnect方法背后正在做什么?(AS3),actionscript-3,firebase,firebase-realtime-database,Actionscript 3,Firebase,Firebase Realtime Database,首先,我想提到的是,我了解FirebaseonDisconnect方法在JavaScript中的工作原理。它提前告诉服务器一旦用户断开连接该怎么做 现在,我正在使用AS3。我应该如何告诉服务器与“onDisconnect”方法相同的事情 当我尝试用JavaScript调试代码时,它似乎没有向服务器发送任何东西(或者可能是我错了) JavaScript中的示例代码: userRef.on('value', function(snapshot) { if (snapshot.val()) {

首先,我想提到的是,我了解Firebase
onDisconnect
方法在JavaScript中的工作原理。它提前告诉服务器一旦用户断开连接该怎么做

现在,我正在使用AS3。我应该如何告诉服务器与“onDisconnect”方法相同的事情

当我尝试用JavaScript调试代码时,它似乎没有向服务器发送任何东西(或者可能是我错了)

JavaScript中的示例代码:

userRef.on('value', function(snapshot) {
  if (snapshot.val()) {
    userRef.onDisconnect().remove(); //this line does the magic
  }
});
告诉服务器该做什么的
onDisconnect
方法正在做什么?如果用AS3编写,那么等效代码是什么

编辑: AS3中的代码作为参考,适用于实时数据库

private var myStream:URLStream;

private function loadLiveFeed():void
{
    var header:URLRequestHeader = new URLRequestHeader("Accept", "text/event-stream");

    var request:URLRequest = new URLRequest("https://<YOUR-PROJECT-ID>.firebaseio.com/breakingnews.json");
    request.requestHeaders.push(header);

    myStream:URLStream = new URLStream();
    myStream.addEventListener(ProgressEvent.PROGRESS, progress);
    myStream.load(request);
}

private function progress(event:ProgressEvent):void
{               
   var message:String = myStream.readUTFBytes(myStream.bytesAvailable);
   trace(message);
}
private var myStream:URLStream;
私有函数loadLiveFeed():void
{
var header:URLRequestHeader=新的URLRequestHeader(“接受”、“文本/事件流”);
变量请求:URLRequest=新的URLRequest(“https://.firebaseio.com/breakingnews.json");
request.requestHeaders.push(header);
myStream:URLStream=newurlstream();
myStream.addEventListener(ProgressEvent.PROGRESS,PROGRESS);
加载(请求);
}
私有函数进度(事件:ProgressEvent):无效
{               
var消息:String=myStream.readUTFBytes(myStream.bytesAvailable);
跟踪(消息);
}

没有时间回答这个问题,但您必须对通信进行反向工程。在幕后,所有这些都只是HTTP(或类似协议),正如As3代码中所示。要确切了解发生了什么,请获取JavaScript中的工作示例代码,其中包含您感兴趣的魔线,然后在浏览器中执行它。可以在浏览器的开发人员工具中监视所有请求。您应该能够识别发送的内容

另外,它是JavaScript,这意味着您必须拥有可以简单读取的源代码。它可能被缩小和/或模糊化,但也许您可以找到一个可读的


了解了裸请求的外观后,您就可以用任何语言实现自己的API,该语言能够执行必要的网络通信。

您共享的代码通过以下方式访问Firebase数据库:

新建URL请求(“https://.firebaseio.com/breakingnews.json");

这意味着它正在使用无连接方法与数据库交互。不幸的是,这也意味着无法注册
onDisconnect()
处理程序,因为它实际上必须在您进行的任何两个HTTP调用之间触发。

那么,如何在As3中建立连接呢?到目前为止,您的代码是什么样子的?看起来他们没有为As3提供API。@null我的错。我刚刚把代码加进去了AS3@null你是对的。他们没有为AS3提供API。但我很好奇“onDisconnect”方法是如何工作的。它(神奇线路)是否向服务器发送了内容?我觉得我在黑暗中。哈哈。实际上我是这样做的(通过浏览器调试代码),但是我没有通过网络选项卡看到任何东西(通常会显示通过网络发送的东西)。是的,我刚刚找到了未缩小的版本。不管怎样,我可能忽略了什么。我会继续调查的。在我结束这篇文章之前,你想提些什么吗。我不知道wireshark捕捉到了什么,我希望有人能说我错了,你能再详细一点吗?当javascript“注册”onDisconnect时,它是否通过网络发送内容?当您注册
onDisconnect()
处理程序时,断开连接时将写入的实际数据即预先计算并发送到服务器。然后,当服务器检测到客户机消失时,它会写入您指定的数据。但是由于RESTAPI是无连接的,所以没有明确的时间来检测客户端是否消失了。我想我现在明白你的意思了。在这种情况下,在AS3中这是没有出路的吗?我们可以使用某种套接字而不是URLRequest吗?ActionScript没有本机Firebase SDK。我不确定ActionScript是否可以使用常规JavaScript库,例如Firebase SDK for JavaScript。但是我怀疑任何人都会不厌其烦地用ActionScript包装RESTAPI,除非他们不得不这样做。如果你说的是真的,那真是太遗憾了。无论如何,给我一点时间,然后再批改答案。谢谢
new URLRequest("https://<YOUR-PROJECT-ID>.firebaseio.com/breakingnews.json");