0
我有一台服务器发送数据的速度尽可能快,它可以产生它并通过套接字发送数据。服务器使用一个队列,并有一个生产者线程和一个消费者线程,将生成的数据从套接字发送到客户端。处理流媒体服务器
问题是读取客户端的数据。我如何设计一个客户端来处理数据,而不会失去同步? 如果我发送从客户端到服务器的确认,我在服务器端失去了并发速度。我如何编写/设计客户端以足够快地处理传入数据? 我是否需要在客户端实现队列?
我有一台服务器发送数据的速度尽可能快,它可以产生它并通过套接字发送数据。服务器使用一个队列,并有一个生产者线程和一个消费者线程,将生成的数据从套接字发送到客户端。处理流媒体服务器
问题是读取客户端的数据。我如何设计一个客户端来处理数据,而不会失去同步? 如果我发送从客户端到服务器的确认,我在服务器端失去了并发速度。我如何编写/设计客户端以足够快地处理传入数据? 我是否需要在客户端实现队列?
除非你有一个要求你必须使用TCP以外的东西,否则让TCP为你做流量控制的工作。让客户端以尽可能快的速度使用数据,服务器在发送更多数据之后将阻塞,而不是客户端准备使用并填充TCP窗口。
TCP将永远不会同步,因为套接字上的数据将始终按顺序传递。但是服务器肯定会发送比客户端消耗的更多的数据,所以它可能已经转移到发送下一批数据,而客户端仍在使用前一个数据。这是你的意思不同步?
您不想让客户端在服务器启动下一个任务之前发送确认,因为这会花费RTT(往返时间,即一批数据中最后一批到达客户端和确认回去),这将在高延迟链路上减慢协议。
如果你不想要这个RTT价格,你不可避免地会具有成实现:
那么我发送的数据是用一个头来构造的。这取决于我如何构建数据。我遇到的问题是解析数据,因为数据移动速度过快而与服务器不同步。 – 2012-03-27 17:31:38
你还没有说过你是否会使用TCP。如果你使用TCP,为什么它会不同步?如果你不这样做,为什么不呢? – Celada 2012-03-27 19:04:28
我正在使用TCP。它不同步,因为服务器在客户端处理完前一组数据之前发送下一组数据。我可以让客户端在两者之间发送确认,但是我失去了并发服务器的好处。我正在尝试为音频/视频制作流媒体服务器和客户端。 – 2012-03-27 20:10:42