我正在一个非常基本的“流媒体图像”服务器作为学校的主体,我已经做了大部分工作,但我仍然停留在数据和控制相关的插座之间的分离:如何使用Python异步接收和回答套接字?
我结构是:TCPServer(我的服务器,用作控制套接字)包含一个dataSocket(仅用于发送图像并在我的TCPServer对象内初始化,当我收到某个查询时)
当我发送数据我的dataSocket,我仍然需要看看客户端是否发送了暂停或停止请求,但是如果我使用python的self.request.recv(1024)
服务器等待响应,而不是继续发送数据(这非常合理)。
我该怎么做才能防止这种行为?我应该在一个单独的线程上启动我的recv(1024)
并在每个循环中运行它(并检查两次迭代之间是否有相关数据)?
我认为如果你想得到答案,你将不得不发布一些代码。你是说你在客户端和服务器之间有两个单独的套接字?一个你发送/接收控制消息(如暂停/停止)的套接字和另一个你发送/接收数据消息的套接字?你通过继承SocketServer.TCPServer然后在该类中创建数据套接字来获得控制套接字?一般来说,如果你处理多个套接字,你需要任何线程或使用类似select的东西:http://docs.python.org/2/library/select.html – Neal
你得到了一切正确。 我的类(TCPSocket的子类)处理控件查询,并且还包含处理数据部分的另一个套接字(称为dataSocket)。 也许我应该尝试select(),尽量减少在我的应用程序中启动的线程数。 – halflings