异步套接字延迟

Posted

技术标签:

【中文标题】异步套接字延迟【英文标题】:AsyncSocket Delay 【发布时间】:2010-06-25 07:27:50 【问题描述】:

所以我正在为我的 iphone 编写一个应用程序,该应用程序通过网络连接到我的计算机,该计算机使用 AsyncSocket 运行一个 java 应用程序。在 java 端,当 iPhone 连接到服务器时,它应该打印出“Ok”。我还在 iphone 端添加了一个 sleep() 命令,所以在它连接到服务器后,它会发送一些数据,然后休眠 5 秒。但是,在 java 端,所有数据,包括“Ok”和数据在 sleep 命令之后被打印出来。所以它就像 iphone 直到程序执行结束后才连接。有人可以帮帮我吗?谢谢...

【问题讨论】:

【参考方案1】:

AsyncSocket 的意义在于一劳永逸。你不应该等待任何事情发生。这个类的全部目的是在后台做它的事情,然后在它完成时通知你。 如果你需要一个阻塞套接字,那么你应该使用别的东西。

【讨论】:

【参考方案2】:

您看到此问题的原因是因为 AsyncSocket 在 runloop 上异步执行,但是当您调用 sleep() 时,您正在阻塞 AsyncSocket 尝试执行的 runloop。

当您调用 [asyncSocket connectToHost:...] 时,该方法会立即返回,并且连接尝试会在后台继续进行。委托方法将在建立连接时通知您。但是完成连接设置的代码(在 AsyncSocket 中)也必须在 runloop 上运行。

同样,当您调用 [asyncSocket writeData:...] 时,该方法会立即返回。发送此数据的代码被安排在套接字的 runloop 上运行。但是如果你调用 sleep() 你会阻止该代码运行。

【讨论】:

以上是关于异步套接字延迟的主要内容,如果未能解决你的问题,请参考以下文章

为啥当它是静态连接时,Web 套接字的延迟会有所不同?

本地主机中套接字之间的数据传输的预期延迟是多少?

Linux 上的 C++:设置套接字和数据包以最小化 RTP 流延迟

如何使用套接字(socket.io)在 NodeJS 中找到客户端的响应时间(延迟)?

Java - 异步套接字通道无法连接到远程异步服务器套接字通道

重用异步套接字:后续连接尝试失败