传统的Socket是阻塞的,这样的话服务器对每个Socket都需要建立一个线程来操作。
请问这句话如何理解,前半句怎么解释?
后半句跟前一句有何必然联系?

java socket io 方面的基础问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 飞猪it 2011-12-06 14:20关注
“传统的Socket是阻塞的”
意思是说:当服务器端执行到
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();/*执行到这一句的时候,这一句下面
的所有代码都不会执行,也就是说,此时阻塞了。意思就是说:服务器正在8888端口进行监听,如果没有客户端来请求,那么我就一直在这监听,直到客户端发送请求了,我才会执行下面的代码。那么什么时候客户端发送请求呢?*/当客户端执行
Socket socket = new Socket("服务器地址",8888);//此时,就代表着客户端发送请求。那么这个时候,服务器端阻塞的下面的代码就可以顺利执行了。
至于后半句:
意思是说,一个socket相当于一条线路,在这一条线路上有两头,一头是客户端,一头是服务器端,所以通话的只有这两方,这两方就把当前的这一条线路(socket)占用了,其他的客户端要是想和服务器端通信,很显然,必须和服务器端再建立一条新的线路(socket),对不对?
那么对于我们第一次建立的线路,在这条线路上保存着客户端和服务器端这两头的信息,如果要通信,我就要通过这一条线路(socket)来获得io,然后才能通信。
对于第二条线路,他们要通信,就要在第二条线路建立相应的IO才可以。
现在是两条线路了,我们都知道在正常模式下服务器端是单线程的,那么这两条线路是无法同时进行相应的IO操作的。但是如果要是把第一条线路(socket)用一个线程来操作,把第二条线路(socket)用另一个线程来操作。他们不就互不影响而且能同时运行了吗。所以:服务器对每个Socket都需要建立一个线程来操作
如果还是不理解的话,我给你发一个小Demo
邮箱:fatherican@sina.com本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报