我正在尝试将标准 PONG 帧发送到服务器,并将此 PONG 帧用作RFC6455中所述的心跳机制。
我成功地将 PONG 帧发送到服务器,但我有点坚持从服务器端接收响应。
我正在尝试这样做:
tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
private function onSocketData(event:ProgressEvent):void
{
//logic goes here
}
问题是,当收到 ACK 帧以响应 PONG 帧时,不会调用 onSocketData()(但是,在 Web 套接字启动时调用此方法)。解雇SOCKET_DATA时是否有任何限制?
有人可以指出我的错误吗?谢谢!
AS3 套接字 API 不会提供任何低级信息。Afaik 这种信息甚至不会由操作系统套接字 API 公开。
当有任何字节可从套接字读取时,将简单地调用SOCKET_DATA -> 套接字读取缓冲区不为空。我认为低级别然后 AS3 驱动一个事件循环,该循环可能使用 select 或 epoll 来侦听操作系统套接字。一旦报告有字节可供读取,就会调用SOCKET_DATA事件,以便您可以读取它们。
但是,如果您的 PONG 得到认可,您为什么会感兴趣呢?它对你没有任何用处。只需等待客户端下一个 PING 或数据包即可。如果在传输过程中出现错误,AS3 将通过IO_ERROR或关闭事件通知您。如果您想利用 websocket PING/PONG 机制来监视客户端,我只需使用一个计时器,该计时器在连接时启动并在接收每个 PING 时重置。如果计时器超时,请关闭与客户端的连接。