你的位置:首页 > Java教程

[Java教程]定制的Server


 1 //匿名聊天服务器 2 //将新的消息POST到/chat地址,或者以GET形式从通一个URL获取文本或事件流 3 //创建一个GET请求到"/"来返回一个简单的HTML文件,这个文件包括客户端聊天UI 4  5 var http = require('http'); 6  7 //聊天客户端使用的HTML文件 8 var clientUI = require('fs').readFileSync("chatClient.html"); 9 var emulation = require('fs').readFileSync("EventSourceEmulation.js");10 11 //ServerResponse对象数组,用于接收发送的事件12 var clients = [];13 14 //每20秒发送一条注释至客户端15 setInterval(function(){16   clients.forEach(function(client){client.write(":ping?n")});17 }, 20000);18 19 //创建一个新服务器20 var server = new http.Server();21 22 //当服务器获取到一个新的请求,运行回调函数23 server.on("request", function(request, response){24   //解析请求的URL25   var url = require('url').parse(request.url);26   27   //如果是"/",服务器就发送客户端聊天室UI28   if(url.pathname === "/"){29     response.writeHead(200, {"Content-Type":"text/html"});30     response.write("<script>"+emulation + "</script>");31     response.write(clientUI);32     response.end();33     return;34   }35   //如果是"/chat"之外的地址,则返回40436   else if(url.pathname !== "/chat"){37     response.writeHead(404);38     response.end();39     return;40   }41   42   //如果请求类型为POST,那么就有一个客户端发送了一个新的消息43   if(request.method === "POST"){44     request.setEncoding("utf8");45     var body = "";46     // 在获取到数据之后,将其添加到请求主体中47     request.on("data", function(chunk){body += chunk;});48 49     // 当请求完成时,发送一个空响应50     request.on("end", function(){51       response.writeHead(200);52       response.end();53 54       message = 'data: '+body.replace('\n', '\ndata: ')+"\r\n\r\n";55 56       clients.forEach(function(client){client.write(message);});57 58      });59   }60   // 客户端请求一组消息61   else {62     response.writeHead(200, {"Content-Type":"text/event-stream"});63     response.write("data: Connected\n\n");64 65     request.connection.on("end", function(){66       clients.splice(clients.indexOf(response), 1);67       response.end();68     });69 70     //记下响应对象71     clients.push(response);72   }73   74 });75 76 //启动服务器77 78 server.listen(8000);79 80