scoket创建多线程服务器
这几天再看socket感觉收获还是蛮大的,以前对socket不太了解正好这一段时间可以好好地学习顺便整理一下以前的知识。
其他的前辈们都学如果做java没有接触过socket那就算没有学java 可见socket是相当重要的,更为可气的是我现在线程这一块的东西都没有怎么接触过,说来惭愧啊。。。
好了直接看demo
需求如下:现在我有一个socket 服务器 有N个客户端要连接这个服务器 那么我们如何处理这种情况。
分析如下:
当我们的server 接收到一个客户端的就会以客户端进行通信然后断开 关闭连接,然后接收下一个 ,加入有N多个客户端同时请求的话(也就是并发了)那么server 无法同时与多个客户端进行通信
解决方案:
第一: 我们使用多线程 每当有一个客户端与server连接的时候我们就启动一个线程 来处理该客户端的请求
第二: 我们使用线程池(这个分为两种情况 我们可以自己写线程池 也可以使用JDK 中的)
方案优劣评定:在代码后面在评定吧.
第一种方案 伪代码如下:
public void service()throws Exception{ while(true){ Socket socket = socketServer.accept(); Thread thread = new Thread(new Handler(socket)); thread.start(); }}class Handler implements Runnable{ private Socket socket; public Handler(Socket socket){ this.socket = socket } public void run(){ //这里处理相应的逻辑 }}
public class Server{ private ExecutorServer executorService; private ServerSocket serverSocket; public Server(){ serverSocket = new ServerSocket(); executorService = ExecutorService.newFixedThreadPool(5); } public void service()throws Exception{ while(true){ Socket socket = serverSocket.accept(); executorService.execute(new Handler(socket)) system.out.println("启动了服务器"); } } }class Handler implements Runnable{ private Socket socket; public Handler(Socket socket){ this.socket = socket } public void run(){ //这里处理相应的逻辑 }}