0
我有一个聊天Java服务器,实际上它接收客户端并将他的id插入到一个deque中,并将其id和socket插入到hashmap中。在另一个线程中,服务器迭代deque并检查客户端是否正在发送消息,以防服务器在另一个线程中使用某个操作符来管理它。我的“问题”是迭代deque(或列表)是一个缓慢的操作,如果我有数以百万计的人连接它应该迭代太多的项目。所以我问你是否有更好的方法来做到这一点。这里是瓶颈的代码:检查在Java服务器中是否有来自客户端的消息
while(true){
String id = MainServer.deque_id.poll();
Socket socket = MainServer.map_socket.get(id);
if(new PushbackInputStream(socket.getInputStream()).available() > 0)
MainServer.queue_manage_message.put(new ManageMessageTask(id, socket, true));
MainServer.deque_id.addLast(id);
}
我试着从inputStream类调用available(),它不起作用(解决方案是使用PushbackInputStream)。我将学习NIO。谢谢 – AnimalsPf
PushbackInputStream.available()不可能比它包装的流的available()方法更好地工作,除非你已经推回了它的东西,而你没有。 – EJP
@AnimalsPf:您对PIS的使用是根据[源代码](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/ PushbackInputStream.java#PushbackInputStream。%3Cinit%3E%28java.io.InputStream%2Cint%29)无操作。 – maaartinus