多个websocket连接处理--简易聊天…

来源:互联网 发布:java多线程管理 编辑:程序博客网 时间:2024/06/07 13:30
   该程序可以实现多个用户之间(多个浏览器)之前的聊天功能,比如打开火狐,Opera,chrome,再其中每一个当中输入内容,另外的两个都会收到发布的内容,但是不能显示是谁发的信息,下一步我会完善
多个websocket连接处理--简易聊天室
新建web项目,别忘了导入我们的Jar包

新建main.html

<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>多个websocket通信的实例</title>
<linkrel="stylesheet" type="text/css"href="css/chat.css">
<scriptsrc="js/jquery.js"></script>
<script>
//首先判断浏览器是否支持我们的websocket
if(!window.WebSocket&&window.MozWebSocket)
window.WebSocket=window.MozWebSocket;
if(!window.WebSocket)
alert("此浏览器不支持WebSocket!");
   //WebSocket
   var ws;
   //页面显示时候的处理
   $(document).ready(function()
   {
    prepareChat();
   });
   
//我们聊天的初始化
functionprepareChat()
{
//首先创建我们的连接
ws=newWebSocket("ws://"+location.host+"/WebSocketChatRoom/ChatDeal");
//连接建立后调用的函数
ws.onopen=function()
{
$("form*").attr("disabled",false);
}
//接收服务器传入的数据时候的处理
ws.onmessage=function(event)
{
//向聊天室当框中追加信息
varchatLog=$("#chatLog");
chatLog[0].innerHTML+="<divclass='chatMsg'>"+event.data+"</div>";
}
}
//用户点击提交按钮的处理
function sendMsg()
{
varmessage=$("#message").val();
//向服务器发送信息
ws.send(message);
$("#message").val("");
}
</script>
</head>
<body>
  
 <header>
  <hgroup>
  <h2>多个websocket通信的实例</h2> 
  </hgroup>
 </header>
  
 <form onsubmit="returnfalse">
  <divid="chatLog"></div>
  <input type="text" id="message" disabledrequired="required">
  <button onclick="sendMsg()"disabled>提交</button>
  
  
 </form>

</body>

</html>

创建servlet

packagecom.hanqing.deal;

importjava.io.IOException;
importjava.util.Set;
importjava.util.concurrent.CopyOnWriteArraySet;

importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;

importorg.eclipse.jetty.websocket.WebSocket;
importorg.eclipse.jetty.websocket.WebSocketServlet;

public class ChatDeal extendsWebSocketServlet
{
public finalSet<ChatWebSocket> users=newCopyOnWriteArraySet<ChatWebSocket>();
public WebSocketdoWebSocketConnect(HttpServletRequest arg0, Stringarg1) 
{
System.out.println(users.size());
// TODO Auto-generated methodstub
return newChatWebSocket(users);
}

//进行处理websocket的类
public class ChatWebSocketimplements WebSocket.OnTextMessage
{

//连接对象
private Connectionconnection;
//所有用户的集合
privateSet<ChatWebSocket>users;
publicChatWebSocket()
{
}
publicChatWebSocket(Set<ChatWebSocket>users)
{
this.users=users;
}
public void onClose(int arg0,String arg1) {
users.remove(this);
}

public void onOpen(Connectionconnection) {
this.connection=connection;
users.add(this);
}
//接收从客户端而来的数据时候被调用
public void onMessage(Stringdata) {
//System.out.println(data);
//对所有用户送出信息
for(ChatWebSocketuser:users)
{
try {
user.connection.sendMessage(data);
} catch (IOException e){
e.printStackTrace();
}
}
}
}

}
0 0