2012-11-29 55 views
0

我正在一个非常基本的“流媒体图像”服务器作为学校的主体,我已经做了大部分工作,但我仍然停留在数据和控制相关的插座之间的分离:如何使用Python异步接收和回答套接字?

我结构是:TCPServer(我的服务器,用作控制套接字)包含一个dataSocket(仅用于发送图像并在我的TCPServer对象内初始化,当我收到某个查询时)

当我发送数据我的dataSocket,我仍然需要看看客户端是否发送了暂停或停止请求,但是如果我使用python的self.request.recv(1024)服务器等待响应,而不是继续发送数据(这非常合理)。

我该怎么做才能防止这种行为?我应该在一个单独的线程上启动我的recv(1024)并在每个循环中运行它(并检查两次迭代之间是否有相关数据)?

+1

我认为如果你想得到答案,你将不得不发布一些代码。你是说你在客户端和服务器之间有两个单独的套接字?一个你发送/接收控制消息(如暂停/停止)的套接字和另一个你发送/接收数据消息的套接字?你通过继承SocketServer.TCPServer然后在该类中创建数据套接字来获得控制套接字?一般来说,如果你处理多个套接字,你需要任何线程或使用类似select的东西:http://docs.python.org/2/library/select.html – Neal

+0

你得到了一切正确。 我的类(TCPSocket的子类)处理控件查询,并且还包含处理数据部分的另一个套接字(称为dataSocket)。 也许我应该尝试select(),尽量减少在我的应用程序中启动的线程数。 – halflings

回答

1

Twisted应该这样做!它处理Python中的异步套接字

+0

不幸的是,我不能使用外部(高级)馆藏,因为本练习的目标是学习如何使用低级网络。 – halflings

+0

但你可以问stackexchange如何做你的功课 – rbp

+0

是的,因为Stackexchange在这里了解(酷)的事情是如何工作的。 (至少这就是我用它的:-))。 – halflings