【问题标题】:Asyncronously send file over TCP connection通过 TCP 连接异步发送文件
【发布时间】:2013-05-12 03:45:14
【问题描述】:

所以我正在制作一个 iOS 应用程序,但这更像是一个一般的网络问题。

所以我有一个电话作为服务器,然后一堆电话作为客户端连接到电话。基本上它是一个游戏/音乐分享器。

真正理解它的语义有点困难,但这并不重要。

重要的是服务器和客户端通过 TCP 连接快速地反复发送彼此的命令和位置,有时客户端希望向服务器发送一个音乐文件(通常为 4MB)作为音乐播放。

我最初遇到的问题是,发送大文件时,会挂起从客户端向服务器发送命令。

我的天真的解决方案是创建另一个套接字来连接服务器以将文件发送到服务器,服务器将检查新套接字的 IP,如果它具有现有连接的 IP,那么它就会绑定它连接到该连接,接收文件,然后断开套接字。

但这样做的问题是套接字连接需要 1-2 秒的延迟,而且我知道可能会发生中间人攻击。

这个问题有更优雅的解决方案吗?

【问题讨论】:

    标签: ios networking asynchronous tcp large-files


    【解决方案1】:

    我不会称您的解决方案幼稚,这在很大程度上是 FTP 的工作方式,在我看来,分离数据和控制路径是一种很好的设计模式。

    我不会担心中间的那个人。如果需要,您可以向客户端添加一个命令,该命令通过数据连接响应服务器提供的秘密,这样您就可以在不使用 ip 寻址的情况下关联连接。

    如果延迟是一个问题,那么为什么不在开始时建立两个连接,操作系统上几个 tcp 连接的开销通常并不显着。

    您还可以将这两个连接用于命令和数据,在它们之间交替使用。由于服务器和客户端都知道连接何时忙碌,因此他们可以选择使用空闲连接。这样做的好处是,它将使两个连接都保持忙碌,以确保它们都已知正在工作。

    您可能还应该为每个套接字使用不同的线程,但我怀疑您正在这样做,因为没有它它不会工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2012-11-11
      相关资源
      最近更新 更多