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

本文介绍了一个使用WebSocket实现的多用户聊天程序。通过创建WebSocket连接,用户可以在不同浏览器间实时交流。程序包括一个HTML页面用于用户交互,以及一个Servlet处理WebSocket连接和消息传递。目前,聊天内容可以在多个浏览器窗口间同步显示,但发送者信息未实现显示,后续将进行完善。
     该程序可以实现多个用户之间(多个浏览器)之前的聊天功能,比如打开火狐,Opera,chrome,再其中每一个当中输入内容,另外的两个都会收到发布的内容,但是不能显示是谁发的信息,下一步我会完善
多个websocket连接处理--简易聊天室
新建web项目,别忘了导入我们的Jar包

新建main.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>多个websocket通信的实例</title>
<link rel="stylesheet" type="text/css" href="css/chat.css">
<script src="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();
    });
    
//我们聊天的初始化
function prepareChat()
{
//首先创建我们的连接
ws=new WebSocket("ws://"+location.host+"/WebSocketChatRoom/ChatDeal");
//连接建立后调用的函数
ws.onopen=function()
{
$("form *").attr("disabled",false);
}
//接收服务器传入的数据时候的处理
ws.onmessage=function(event)
{
//向聊天室当框中追加信息
var chatLog=$("#chatLog");
chatLog[0].innerHTML+="<div class='chatMsg'>"+event.data+"</div>";
}
}
//用户点击提交按钮的处理
function sendMsg()
{
var message=$("#message").val();
//向服务器发送信息
ws.send(message);
$("#message").val("");
}
</script>
</head>
<body>
  
  <header>
   <hgroup>
   <h2>多个websocket通信的实例</h2> 
   </hgroup>
  </header>
  
  <form onsubmit="return false">
   <div id="chatLog"></div>
   <input type="text" id="message" disabled required="required">
   <button onclick="sendMsg()" disabled>提交</button>
  
  
  </form>

</body>

</html>

创建servlet

package com.hanqing.deal;

import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;

public class ChatDeal extends WebSocketServlet
{
public final Set<ChatWebSocket> users=new CopyOnWriteArraySet<ChatWebSocket>();
public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) 
{
System.out.println(users.size());
// TODO Auto-generated method stub
return new ChatWebSocket(users);
}

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

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

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值