<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>EventSource</title>
</head>
<body>
<script>
window.onload=function(){
name();
function name(){
var username=prompt("请输入您的昵称");
if(!username){
return false;
}
var xml=new XMLHttpRequest();
xml.open("POST","/addUser");
xml.send("name="+username);
xml.onreadystatechange=function(){
if(xml.status=200&&xml.readyState==4){
var res=JSON.parse(xml.responseText)
if(res.success=="ok"){
alert("欢迎你的加入");
window.hiddenValue.value=res.name;
var es = new EventSource("/chat");
es.addEventListener("message", function(e){
var temp=document.createElement("li");
temp.innerHTML= e.data;
window.message.scrollIntoView();
window.content.appendChild(temp);
},false);
}else{
alert(res.msg+",如果你还想加入,行刷新重新输入用户名称");
//本来用的递归,但是体验不好,就改了
//name();
}
}
}
}
var div=document.getElementsByTagName("div")[0]
div.style.width=window.innerWidth+"px";
}
function sendMessage(){
var message=window.message.value;
if(message.trim()){
var b=new XMLHttpRequest();
b.open("POST","/chat");
b.send("message="+window.message.value+"&name="+ window.hiddenValue.value);
}
}
</script>
<div>
<ul id="content">
</ul>
</div>
<input type="text" name="message" id="message" /><input type="button" value="发送" onclick="sendMessage()"/>
<input type="hidden" id="hiddenValue">
</body>
</html>
var server=require("http"); var url=require("url"); var file=require("fs"); var querystring=require("querystring"); var clientName=[]; var responseArray=[]; server.createServer(function (request, response) { var message=""; var name=""; var urlContent=url.parse(request.url); //首页 if(urlContent.pathname=="/"){ response.writeHead(200,{"Content-Type":"text/html;charset=utf-8"}); file.readFile("../views/Index.html",function(err,data){ response.end(data); }) return false; } else if(urlContent.pathname=="/chat"){ //发送消息 if(request.method=="POST"){ //并不能根据response得到正确的name索引,所以前台传递name request.on("data",function(data){ data= querystring.parse(data.toString()); message+=decodeURIComponent(data.message.trim()); name+=decodeURIComponent(data.name.trim()); }) request.on("end",function(){ responseArray.forEach(function(i){ i.write("data:"+name+"说:"+message+"\n\n"); }) }) response.end(); }else{ //建立长连接,保存相应 responseArray.push(response); response.writeHead(200,{"Content-Type":"text/event-stream"}); response.write("data:已连接至服务器\n\n"); request.connection.on("end",function(){ var index=responseArray.indexOf(response) clientName.splice(index,1); responseArray.splice(index,1); response.end(); }) } }else if(urlContent.pathname=="/addUser"){ //添加用户名 request.on("data",function(data){ data= querystring.parse(data.toString().trim()); name+=decodeURIComponent(data.name.trim()); }); request.on("end",function(){ response.writeHead(200,{"Content-Type":"text/json;charset=utf-8"}); if(clientName.some(function(i){ if(i==name) return true; })){ response.write("{\"success\":\"fail\",\"msg\":\"用户名重复\"}") }else{ response.write("{\"success\":\"ok\",\"name\":\""+name+"\"}"); responseArray.forEach(function(i){ i.write("data:欢迎"+name+"的加入"+"\n\n"); }) clientName.push(name); } response.end(); }) } else{ response.writeHead(404,{"Content-Type":"text/json"}); response.end(); } }).listen(8012);
后台使用Node.js 博主是一个新人,会有很多不太适合的代码,希望大家能多多帮助。代码中注意路径问题。
原文:http://www.cnblogs.com/wofeiwofei/p/5006713.html