【发布时间】:2012-04-14 07:59:58
【问题描述】:
我正在使用 Flex/Flash 客户端和我自己在 Linux 上运行的服务器编写一个实时应用程序。
我希望能够从 Flex 客户端实时发送数据(以响应用户操作)。我试过以下方法:
- flash.net.NetConnection.call()
- flash.net.sendToURL()
- flash.net.Socket.write() 后跟 flash.net.Socket.flush()
在每种情况下,这些调用总是等待服务器发送 ACK,然后才能再次发送数据。换句话说,如果你这样做:
var nc:NetConnection;
// Setup code left out
nc.call("foo", someData);
// Some more code left out
nc.call("foo", moreData);
在收到第一个调用的 ACK 之前,上面的第二个 nc.call() 不会向服务器发送数据。我希望能够立即发送数据而无需等待该 ACK。
如果到服务器的往返时间很长(例如 300 毫秒),我只能每秒向服务器发送 3 次数据。理想情况下,我希望能够每秒最多发送 30 次数据,但目前只有大约 30 毫秒的 RTT 才能做到这一点。
如果服务器本身延迟 300 毫秒获取数据也没关系 - 我意识到我无法超越光速。
有什么方法可以让 Flash Player 在不等待 ACK 的情况下发送数据?在其他环境中,这是通过在套接字上设置 TCP_NODELAY 标志来完成的,但似乎我在 Flash/Flex 中没有那种级别的控制。
更新:我想我可能偶然发现了一个解决方法。我认为 Flash Player 试图让主机浏览器为每个 NetConnection 对象提供一个单独的 TCP 连接,这取决于每个浏览器的连接限制,例如2 为 IE。连接限制可以通过使用子域来解决(还没有尝试过),所以希望可以通过使用 NetConnections 池来更接近实时行为。
谢谢。
【问题讨论】:
标签: apache-flex flash