我们正在为每个客户端服务器构建一个异步线程,并偶然发现问题。我们希望线程始终准备好从套接字读取或写入\。我们目前使用socket的读取方法阻塞,因此我们不能发出任何写请求。
如果是这样,它是否仍符合每个客户端设计模式的线程?
答案 0 :(得分:2)
使用异步(非阻塞)套接字IO。或者您也可以使用单独的线程进行写作。
答案 1 :(得分:2)
确保套接字是非阻塞的(我认为是FIONBIO)。并使用select()
确定何时可以读取数据。
答案 2 :(得分:1)
您应该使用单独的线程,一个用于读取,一个用于写入,并使用某种同步方法(例如,用互斥锁保护的共享缓冲区)在两者之间进行通信。此外,select
调用可用于查看套接字上是否有任何待处理的数据。
<强>更新强>
我最初想的是可以从C调用的select()
函数。哦。
我在Java API中最接近的是Socket.getInputStream()
,它为您提供了一个流,可以对其进行测试,以确定是否可以从底层套接字读取字节。