index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>相亲相爱一家人聊天室</title>
<link rel="stylesheet" href="">
<style>
*{margin: 0;padding: 0;}
body{
background-color: #ccc;
}
.box{
width: 600px;
height: 740px;
margin: 0 auto;
margin-top: 50px;
border-radius: 20px;
background-color: #fff;
overflow: hidden;
}
.conn{
width: 100%;
height: 35px;
background-color: #777;
border-radius: 5px;
margin-top: 15px;
}
.conn > span{
width: 20%;
height: 35px;
text-align: center;
line-height: 35px;
float: left;
color: #fff;
}
.conn > input{
display: block;
width: 60%;
height: 33px;
border: 0px;
float: left;
}
.conn > button{
width: 20%;
height: 35px;
float: left;
border-radius: 6px;
cursor: pointer;
}
.msg{
width: 100%;
height: 600px;
overflow-y:auto;
overflow-x:hidden;
}
.send-msg{
width: 100%;
height: 65px;
}
.send-msg > input{
display: block;
width: 79%;
height: 60px;
float: left;
font-size: 20px;
}
.send-msg > button{
width: 20%;
height: 65px;
font-size: 30px;
float: left;
border-radius: 6px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="box">
<!-- 连接聊天室使用 -->
<div class="conn" id="userMsg">
<span>请输入昵称:</span>
<input type="text" id="nickname">
<button onclick="connect()">连接聊天室</button>
</div>
<div class="msg" id="msg">
</div>
<div class="send-msg">
<input type="text" id="umsg" maxlength="200">
<button onclick="send()">发 送</button>
</div>
</div>
<script>
var ws = null;
function connect(){
//alert("点击了连接按钮");
//1、获取昵称
var nickname = document.getElementById("nickname").value;
//2、和服务器建立长连接
//ws:// websocket协议
//127.0.0.1 服务主机地址
//长连接接口
ws = new WebSocket("ws://192.168.0.151/chatServer/"+nickname);
ws.onopen=function(){
setMsg("和聊天服务器连接成功!!!");
//把连接功能隐藏掉
document.getElementById("userMsg").style.display = "none";
}
ws.onmessage=function(event){//服务器发给我们的信息
console.log(event.data);
//json格式化一下
var data = JSON.parse(event.data);
//修复可以发标签的bug
setMsg(data.nick+"说:"+data.msg);
}
ws.onclose=function(){
}
ws.onerror=function(){
}
}
var isMsg = true;
function send(){
if(isMsg){
//获取用户输入的话
var umsg = document.getElementById("umsg").value;
//清楚掉发生的数据
document.getElementById("umsg").value = "";
ws.send(umsg);
isMsg = false;
setTimeout(function(){
isMsg = true;
}, 3000);
}else{
setMsg("发送频率过快3秒后发送!!!");
}
}
//添加信息的方法
function setMsg(msg){
//往消息框追加内容 并换行
var omsg = document.getElementById("msg");
omsg.innerHTML += msg +"</br>";
omsg.scrollTop = omsg.scrollHeight;
}
//监听回车
document.onkeydown = function (event) {
var e = event || window.event;
if (e && e.keyCode == 13) { //回车键的键值为13
send();
}
};
</script>
</body>
</html>
ChatServer.java
package web;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
/**
* 长连接接口
*/
//value 写接口地址
@ServerEndpoint(value = "/chatServer/{nickName}")
public class ChatServer {
//把所以连接用户放到set集合
private static Set<Session> users = new HashSet<Session>();
@OnOpen
public void onOpen(Session s) {
//长连接建立时调用
//System.out.println("长连接建立成功");
users.add(s);
}
@OnClose
public void onClose(Session s) {
//长连接关闭时调用
users.remove(s);
}
@OnMessage
public void onMessage(String msg,Session s,@PathParam("nickName")String nickName) {
//收到客户端发的信息时调用
for (Session session : users) {//循环广播
String msgJson = "{\"nick\":\""+nickName+"\",\"msg\":\""+deleteAllHTMLTag(msg)+"\"}";
try {
//发送信息
session.getBasicRemote().sendText(msgJson);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@OnError
public void onError(Session s,Throwable error) {
//异常时调用
users.remove(s);
}
/**
* 删除所有的HTML标签
*
* @param source 需要进行除HTML的文本
* @return
*/
public static String deleteAllHTMLTag(String source) {
if(source == null) {
return "";
}
String s = source;
/** 删除普通标签 */
s = s.replaceAll("<(S*?)[^>]*>.*?|<.*? />", "");
/** 删除转义字符 */
s = s.replaceAll("&.{2,6}?;", "");
return s;
}
}
最后修改于 2021-09-18 16:40:48
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

