【发布时间】:2016-09-19 12:25:19
【问题描述】:
我正在使用套接字创建程序。我有两个套接字:一个用于监听,一个用于连接到外部服务器。 一是连接到无限循环中的服务器读取数据,服务器不断地将数据流式传输到我的程序,并“实时”将该数据写入输出。
第二个是监听消息——当消息为 PAUSE 时,程序应该停止从第一个套接字读取数据。
遇到这种情况怎么办? Poll()/select() 不是解决方案,因为这两个套接字需要同时工作,并且当 poll 检测到要从套接字一个读取的数据时,我将进入无限循环,并停止侦听第二个套接字。
我曾想过要打破在恒定时间内从服务器读取数据的无限循环,但是当消息到来时它必须等待。
请帮帮我!
【问题讨论】:
-
我不明白为什么 poll/select 不是这里的解决方案 - 为什么你“进入无限循环并停止收听”?不过,多线程是另一种可能的解决方案。
-
在一个线程根据需要不断监听的情况下使用多线程。或者定期轮询套接字并将接收到的数据排入某种缓冲区/队列。
-
@OliverCharlesworth poll/select 等待一个或多个文件描述符“准备好”,我的第一个套接字总是准备好,那么第二个套接字应该“说”什么呢?
-
@Michocio,选择/轮询允许多个套接字在单个时间点“准备好”(据我所知)。您将按顺序浏览它们。
-
@thcpx “在某个时间点“准备好”是什么意思?