2017-06-05 36 views
-1

我正在用Python构建套接字服务器。套接字服务器从客户端套接字同时响应多个请求

此服务器

  1. 从客户端接收数据
  2. 做了这里(大约需要在最大大约10秒,取决于输入数据)
  3. 上述
做了一些工作后的数据发送回

该系统工作正常,除非客户端不连续同时发送数据。例如,假设服务器需要5秒来处理数据,客户端每10秒发送一次数据。但是,问题是客户端一次发送多个请求,从而导致延迟。目前,客户端不能发送数据到服务器,除非服务器准备好接收数据,这意味着服务器没有做任何工作。以下是我想要建立的。

  • 一)建立在插槽服务器,其主要任务是使输入数据的队列,以便客户端可以将数据发送到服务器,即使服务器繁忙
  • 二)让一个线程(在此队列中,我在套接字服务器中,并发性和并行性有点混淆,工作在套接字中,而不是系统调用),这样服务器就可以“同时”工作。
  • C)数据发送回客户端套接字

我的问题如下。

  1. 是否需要使用队列才能达到a)?
  2. 它是线程还是别的,我需要用来实现b)?

在此先感谢

最佳

啧啧

+0

您可能会发现使用许多现有的Python服务器框架之一更容易。 – pvg

+0

thx @pvg我会看看它。 –

+0

我刚刚看到您的其他评论,这是关于一个_single_客户端,这进一步简化了这一点。如果你是计算受限的并且正在寻找实际的并行性,那么你很可能会想要像多处理那样的东西。从迄今为止你所写的内容来看,你还没有完全清楚你想要完成什么,但几乎可以肯定你不需要从头开始彻底改造它。 – pvg

回答

1

呀这样的事情可以工作。

首先,您需要一个线程来接收和发送数据。如果您的客户端数量有限,则可以为每个客户端创建一个线程,但它不是一个或多或少强大的系统的选项。为了能够在单个线程中为多个客户端服务,套接字应为非阻塞。否则一个长传输将阻止其他传输。非阻塞代码有更复杂的结构,使用select,所以我建议花一些时间阅读它。

然后,你需要一个线程来做数学。或者,如果“数学”花费很长时间执行,那么还有几个线程/进程。

最后但并非最不重要的是,这些套接字线程和“数学”线程应该使用两个队列来交换数据。简单的lists就够了,但要确保它们是同步的。用互斥体或锁来保护它们。这是另一个值得一读的广泛话题。

+0

Thx @ Vovanrock2002。 在我的情况下,我没有多个客户端。我只有一个客户。这个“单一”客户端几乎实时地发送多个请求。这就是说,你的评论仍然有效? –

+0

@GeeYeolNahm是的,在这种情况下,一个IO线程和一个或多个执行线程就可以。 – Vovanrock2002

+0

Thx @ Vovanrock2002。我可以在您的帮助下成功构建套接字服务器! –

相关问题