NIO中的SocketChannel与Socket关系

来源:2-12 socket相关

记住没有

2020-04-08

请教一下老师NIO中的SocketChannel 和Socket什么关系,服务端接收Socket是不是也有限制的。

写回答

1回答

翔仔

2020-04-09

同学好,

如果没有客户端连接代码会一直阻塞在Socket socket = serverSocket.accept();,当有客户端连接并发送数据时会执行代码,如果没有数据会阻塞在while (bufferedReader.read(charBuffer) != -1)其他客户端无法连接。如果想要其他客户端和服务端保持长连接需要用多线程。

通过socketChannel 设置非阻塞,并通过选择器,可以用一个线程对个客户端保持长连接,这个通过轮询的方式来处理的。

socket 是有最大连接数限制的,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄); 所以机器上 的限制可以使用 ulimit -n 来查看


0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8442 学习 · 1872 问题

查看课程