基于websocket的多人页面聊天室
2016-04-29 15:01
603 查看
这是一个简单的页面聊天室。关于websocket是什么,看看这篇回答吧,要知道它是一个持久化的协议。
在项目中登录注册我就不讲了,直接从聊天室开始吧。
demo 下载地址:http://download.csdn.net/detail/wujiaoyan0423/9506595
在项目中登录注册我就不讲了,直接从聊天室开始吧。
页面js
var socket =null; var user =null; function parseObj(strData){//change string to obj return (new Function( "return " + strData ))(); }; //dbclick to kick function userdbClick(obj){ if(user.type!=""&&user.type=="1"){ socket.send("kick#"+$(obj).attr("id")); }else{ alert("You can`t kick him/her"); } }; //if browser supports WebSocket if (!window.WebSocket) { alert("WebSocket not supported by this browser!"); } $(function(){ if('${user}'==""){ alert("please login in "); window.location.href="login.jsp"; }else{ user = eval('(' + '${user}' + ')'); $("#myname").text(user.name); var myt; if(user.type==1){ myt="Admin"; }else{ myt="User"; } $("#mytype").text(myt); //create socket object socket = new WebSocket("ws://"+ window.location.host+"/${pageContext.request.contextPath}/chat"); socket.onopen = function() { $("#showMsg").append("Connection Successful...<br/>"); socket.send("add#"+user.id); }; socket.onmessage = function(message) { var data=parseObj(message.data); //if have been kicked ,goto login.jsp if(typeof(data.type)!= "undefined"){ if(data.type=="kick"){ alert(data.message); window.location.href="login.jsp"; return; } } //show the msg to screen $("#showMsg").append("<span style='display:block'>"+data.message+"</span>"); //update the user list while receive the msg from server var users=data.users; if(typeof(users)!= "undefined"){ $("#users").empty(); $("#users").append("<option value='0'>all</option>"); $("#userlist").empty(); $.each( users, function(i, n){ if(n.id==user.id){ }else{ $("#users").append("<option value='"+n.id+"'>"+n.name+"</option>"); } var t=n.type==1; if(n.id==user.id){ alert("<c:if test='"+n.type+"==1'>A--</c:if>"); $("#userlist").append("<p id='"+n.id+"' class='my'><c:choose><c:when test='"+t+"'>A--</c:when><c:otherwise>U--</c:otherwise></c:choose>"+n.name+"</p>"); }else{ $("#userlist").append("<p id='"+n.id+"' ondblclick='userdbClick(this);'><c:choose><c:when test='"+t+"'>A--</c:when><c:otherwise>U--</c:otherwise></c:choose>"+n.name+"</p>"); } }); } }; //when leave the page socket.onclose = function(){ <%session.setAttribute("user","");%> socket.send('leave#'); window.location.href="login.jsp"; }; //when error socket.onerror = function() { alert("error"); }; //send msg to others or only one $("#sendButton").click(function() { if($("#users").val()!=0){ socket.send("sendone#"+$("#msg").val()+"#"+$("#users").val()); }else{ socket.send("sendall#"+$("#msg").val()); } $("#msg").val(""); }); //leave the chat room $("#leaveButton").click(function(){ window.location.href="login.jsp"; socket.send('leave'); }); //change the user state $("#state").change(function(){ var state=$("#state").val(); socket.send("state#"+state); }); } });
server java
这个类中的方法基本与js中的对应,这个OnMessage方法主要是根据页面传过来的数据进行分类处理@OnMessage public void onMessage(String unscrambledWord, Session session, EndpointConfig config){ String[] str=unscrambledWord.split("#"); User user=getUserBySession(session); if("leave".equals(str[0])){//user leave user.getHttpSession().setAttribute("user", ""); }else if("sendone".equals(str[0])){//send one user JSONObject json=new JSONObject(); json.put("message", "["+new Date()+"]"+user.getName()+" send to "+userList.get(str[2]).getName()+"<br/>"+str[1]); broadcastToOne(json,str[2],user); }else if("sendall".equals(str[0])){//send all users JSONObject json=new JSONObject(); json.put("message", "["+new Date()+"]"+user.getName()+"<br/>"+str[1]); broadcastAllUser(json); }else if("add".equals(str[0])){//new user come in userList.get(str[1]).setSession(session); JSONObject json=new JSONObject(); String welcome="*****welcome,"+userList.get(str[1]).getName()+"! *****"; json.put("message", welcome); json.put("users", getUserList()); broadcastAllUser(json); }else if("state".equals(str[0])){//change user`s state user.setState(str[1]); }else if("kick".equals(str[0])){//kick user if(user.getType().equals("1")){ String outid=str[1]; JSONObject json=new JSONObject(); json.put("message", "You been kicked !"); json.put("type", "kick"); user.getHttpSession().setAttribute("user", ""); kick(json,outid); } }else{ JSONObject json=new JSONObject(); json.put("message", user.getName()+" "+new Date()+unscrambledWord); broadcastAllUser(json); } }
demo 下载地址:http://download.csdn.net/detail/wujiaoyan0423/9506595
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 2015-2016网页设计趋势分析 Web Design of Trends
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序