动作脚本套接字不处理tcp ACK帧

时间:2013-10-14 11:02:38

标签: actionscript-3 sockets tcp websocket

我正在尝试向服务器发送标准PONG帧,并使用此PONG帧作为RFC6455中描述的心跳机制。

我成功地将PONG帧发送到服务器,但我很难接受来自服务器端的响应。

我试图这样做:

tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);


private function onSocketData(event:ProgressEvent):void
{
//logic goes here
}

事情是,当在PONG帧的响应中收到ACK帧时,不调用onSocketData()(但是,在Web套接字启动时,此方法被调用)。触发SOCKET_DATA时是否有任何约束?

请问有人指出我的错误吗?谢谢!

1 个答案:

答案 0 :(得分:1)

AS3套接字API不会为您提供任何低级别信息。即使操作系统套接字API甚至没有公开这种信息。

当有任何可用于从套接字读取的字节时,将简单地调用SOCKET_DATA - >套接字读缓冲区不为空。 我认为低级别然后AS3驱动一个事件循环,它可以使用select或epoll来监听OS套接字。只要报告有可读取的字节,就会调用SOCKET_DATA事件,以便您可以读取它们。

但是,如果您的PONG得到承认,为什么对此感兴趣呢?它不应该对你有任何用处。只需等待客户端下一个PING或数据包。 如果在传输过程中出现错误,AS3将通知您IO_ERROR或CLOSE事件。 如果你想利用websocket PING / PONG机制来看门狗客户端,我只需要使用一个定时器,它在连接时启动并在接收到每个PING时复位。如果计时器超时,则关闭与客户端的连接。