服务端代码

server.SimpleSocketServer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package  server;
 
import  java.io.BufferedReader;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.io.OutputStream;
import  java.net.ServerSocket;
import  java.net.Socket;
import  java.util.Random;
 
public  class  SimpleSocketServer {
     
     public  void  doAccept(Socket socket)  throws  Exception{
         InputStream is = socket.getInputStream();
         
         System.out.println( "receive below information from client ... " );
         byte [] bytes =  new  byte [ 1024 ];
         int  length = - 1 ;
         while ((length=is.read(bytes,  0 1024 ))> 0 ){
             int  breakLineCount =  0 ;
             for ( int  i= 0 ;i<length;i++){
                 char  c = ( char ) bytes[i];
                 System.out.print(c);
                 if ( '\n' ==c){
                     breakLineCount++;
                 }
             }
             if (breakLineCount> 1 ){
                 break ;
             }
         }
         
         String response = getSimpleRespose();
         OutputStream os = socket.getOutputStream();
         os.write(response.getBytes());
         
         os.flush();
         
         socket.close();
         
     }
     
     private  String getSimpleRespose()  throws  Exception{
         InputStream is =  this .getClass().getResourceAsStream( "simple_response" );
         
         BufferedReader br =  new  BufferedReader( new  InputStreamReader(is));
         
         String line =  null ;
         
         StringBuilder response =  new  StringBuilder();
         
         while ((line=br.readLine())!= null ){
             response.append(line).append( "\n" );
         }
         
         String text = getRandomRes();
         
         response.append( "Content-Length:" +text.length()).append( "\n\n" )
                 .append(text);
         
         return  response.toString();
     }
     
     private  String getRandomRes(){
         Random random =  new  Random();
         if (random.nextInt( 10 )% 2 == 0 ){
             return  getDataWithEventRes();
         } else {
             return  getDataRes();
         }
     }
     
     private  String getDataRes(){
         Random random =  new  Random();
         int  randomValue = random.nextInt( 1000 );
         String text =  "data:the random value is : " +randomValue;
         text+= "\n\n" ;
         return  text;
     }
     
     private  String getDataWithEventRes(){
         Random random =  new  Random();
         int  randomValue = random.nextInt( 1000 );
         String text =  "data:the random value is : " +randomValue+ "\n" ;
         text+= "event:myevent" ;
         text+= "\n\n" ;
         return  text;
     }
     
     public  void  start()  throws  Exception{
         ServerSocket serverSocket =  new  ServerSocket( 8888 );
         
         while ( true ){
             Socket socket = serverSocket.accept();
             doAccept(socket);
         }
         
     }
     public  static  void  main(String[] args)  throws  Exception{
         
         new  SimpleSocketServer().start();
     }
}

server/simple_response

1
2
HTTP/ 1.1  200  OK
Content-Type: text/event-stream

客户端html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
< html >
< body >
     < h1 >获得服务器更新</ h1 >
     < div  id = "result" ></ div >
 
  < script >
     if(typeof(EventSource)!=="undefined"){
         var source=new EventSource("http://localhost:8888/");
         source.onopen = function(){
             console.log("connection opened ... ");
         };
 
         source.onmessage=function(event){
             document.getElementById("result").innerHTML+=event.data + "< br  />";
         };
 
         source.addEventListener("myevent", function(event) {
             console.log("event:"+event.type);
             console.log(event.data);
         });
 
         source.onerror = function(){
             console.log("connection close ... ");
         };
 
     }else{
       document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
     }
</ script >
 
</ body >
</ html >