3个回答
展开全部
用流的方式需要对每一个连接进行查询。如果以BufferedReader的readLine接收则是阻塞的,其它方式为非阻塞。通常网页服务器用阻塞式,这种情况下,需要为每一个连接分别生成一个监听线程。工业网络服务器用二进制非阻塞,这种情况下,可以为每一个连接分别生成监听线程,也可以使用一个后台线程进行轮询。非阻塞方式下,若无消息,则返回null(目前任何通信线路都无法发送null和长度为0的报文,所以函数返回null一定代表无消息)。阻塞方式下,若无消息,则线程等待。阻塞与非阻塞方式下的连接中断,都会抛出异常,但是机械断线则不会立即招聘异常,需要等待下一次调用write。非阻塞式read在机械断线时返回null。
用AIO方式需要先建立一个监听器。当连接建立、有消息传入时,会调用监听器中的回调函数。回调函数形参会传入一个channel。channel为阻塞通信,当对方关闭连接或发送消息失败时抛出异常,对机械断线无效。连接建立时传入channel的目的在于允许服务器首先发送信息。
用NIO方式需要建立一个socket管理线程,每当有事件触发时,可以用轮询的方式查询当前事件类型。事件有建立连接与接收到消息两种,为boolean类型。
建议使用AIO,AIO的稳定性、性能、调用方式都是最好的。唯一不足在于AIO不支持JDK1.6。
然后如果没有建立大型服务器的需求,则使用流。流的稳定性也很好,性能差一点(特别是工业通信需要轮询,导致延迟),调用方式步骤多,但是易上手,标准化程度最高。也最适合当客户端使用。
NIO是用于JDK1.6的大型服务器架构,很难得到理想的稳定性,做强制断线试验时,NIO总是能够及时死机,流通信能坚持半分钟,AIO不管怎么搞都不会死机。
用AIO方式需要先建立一个监听器。当连接建立、有消息传入时,会调用监听器中的回调函数。回调函数形参会传入一个channel。channel为阻塞通信,当对方关闭连接或发送消息失败时抛出异常,对机械断线无效。连接建立时传入channel的目的在于允许服务器首先发送信息。
用NIO方式需要建立一个socket管理线程,每当有事件触发时,可以用轮询的方式查询当前事件类型。事件有建立连接与接收到消息两种,为boolean类型。
建议使用AIO,AIO的稳定性、性能、调用方式都是最好的。唯一不足在于AIO不支持JDK1.6。
然后如果没有建立大型服务器的需求,则使用流。流的稳定性也很好,性能差一点(特别是工业通信需要轮询,导致延迟),调用方式步骤多,但是易上手,标准化程度最高。也最适合当客户端使用。
NIO是用于JDK1.6的大型服务器架构,很难得到理想的稳定性,做强制断线试验时,NIO总是能够及时死机,流通信能坚持半分钟,AIO不管怎么搞都不会死机。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
开一个线程不就好了。。。 服务器只要接受到一个SOCKET 就开一个线程阿。。参数就是这个socket。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询