【游戏服务端开服 二 】 一对多的请求

1 这类似架构可以简单满足 C/S 模型 

 1 package rodking.server;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.PrintWriter;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 
10 /**
11  * @author rodking
12  * @des 不用等待可以可以同时处理多个客户端请求,
13  * (但是如果请求过,多线程会成为系统瓶颈)
14  * (问答模式,单通道通信) 阻塞通信
15  */
16 public class MultiThreadServer {
17 
18     private ServerSocket server;
19     private Socket socket = null;
20 
21     public void serverStart() {
22         try {
23             server = new ServerSocket(9000);
24             // 循环监听socket连接
25             while (true) {
26                 // 启动一个服务端
27                 System.out.println("[ S ]: game server start port 9000.");
28                 // 监听一个客户端连接
29                 socket = server.accept();
30 
31                 // 多线程处理客户端连接
32                 MultiThread clientServer = new MultiThread(socket);
33                 new Thread(clientServer).start();
34             }
35 
36         } catch (IOException e) {
37             e.printStackTrace();
38         }
39     }
40 
41     class MultiThread implements Runnable {
42         private BufferedReader is = null;
43         private PrintWriter os = null;
44         private String line;
45         private Socket socket;
46 
47         public MultiThread(Socket socket) {
48             this.socket = socket;
49         }
50 
51         @Override
52         public void run() {
53             System.out.println("[ S ]: one client in server");
54             try {
55                 this.is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
56                 this.os = new PrintWriter(socket.getOutputStream());
57                 line = is.readLine();
58                 // TODO Auto-generated method stub
59                 while (!line.equals("bye")) {
60 
61                     System.out.println("Server:" + line);
62                     System.out.println("Client:" + line);
63 
64                     // TODO 这里可以做协议派发 (封装 os)
65                     os.println("[ received ] " + line);
66                     os.flush();
67 
68                     line = is.readLine();
69                 }
70 
71                 System.out.println("[ S ]: game server close.");
72 
73                 os.close();
74                 is.close();
75                 socket.close();
76             } catch (Exception e) {
77                 e.printStackTrace();
78             }
79         }
80     }
81 
82     public static void main(String[] args) {
83         new MultiThreadServer().serverStart();
84     }
85 }
View Code

 

posted @ 2016-03-30 19:59  嘎空间  阅读(201)  评论(0编辑  收藏  举报