Actionscript 3 动作脚本套接字没有';t处理tcp确认帧

Actionscript 3 动作脚本套接字没有';t处理tcp确认帧,actionscript-3,sockets,tcp,websocket,Actionscript 3,Sockets,Tcp,Websocket,我正在尝试将standart PONG frame发送到服务器,并将此PONG frame用作RFC6455中描述的心跳机制 我成功地将PONG帧发送到服务器,但我有点难以从服务器端接收响应 我试着这样做: tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); private function onSocketData(event:ProgressEvent):void { //logic goes here

我正在尝试将standart PONG frame发送到服务器,并将此PONG frame用作RFC6455中描述的心跳机制

我成功地将PONG帧发送到服务器,但我有点难以从服务器端接收响应

我试着这样做:

tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);


private function onSocketData(event:ProgressEvent):void
{
//logic goes here
}
问题是,在PONG帧的响应中接收到ACK帧时,不会调用onSocketData()(但是,在web套接字启动时,会调用此方法)。激发套接字_数据时是否有任何约束


有人能指出我的错误吗?谢谢大家!

AS3套接字API不会提供任何低级信息。据我所知,这种信息甚至没有被OS套接字API公开

当有任何字节可从套接字读取->套接字读取缓冲区不为空时,将简单地调用套接字\ u数据。 我认为低级AS3驱动一个事件循环,它可能使用select或epoll在OS套接字上监听。一旦报告有可读取的字节,将调用SOCKET_数据事件,以便您可以读取它们

但是如果你的乒乓球被承认了,你为什么会感兴趣呢?这对你没有任何用处。只需等待客户端的下一个PING或数据包。 如果在传输过程中出现错误,AS3将通知您IO_错误或关闭事件。
如果您想利用websocket PING/PONG机制来监视客户端,我只需要使用一个定时器,它在连接时启动,在接收到每个PING时重置。如果计时器超时,请关闭与客户端的连接。

我试图解决的问题有点不同:我想在客户端知道服务器是否在线。服务器在正常关机时关闭连接是正常的-客户端也关闭了它的套接字,但当服务器意外关机时-客户端永远都在监听这个套接字,永远不知道这是服务器中断,还是没有通过web套接字发送通知。不过,谢谢你分享你的知识!你的答案让事情变得更清楚。然后使用ping/pong消息在客户端实现一个看门狗。您定期向服务器发送ping,然后启动并使用计时器检查是否在特定的时间间隔内收到了pong。如果直到计时器用完才收到pong,则假定服务器已死机。websocket标准没有说明谁可以发送乒乓球信息以及发送间隔。它只指定如果收到ping,则必须发送pong消息。您还可以在应用程序级协议中自定义乒乓球消息。感谢您的支持,Matthias!然而,这并不符合RFC,我认为这也是最好的解决方案。再次感谢!