添加依赖
<!-- websocket --> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>${websocket.version}</version> <scope>provided</scope> </dependency>
ChatServer后台类
package edu.nf.ws.server; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.sql.Time; import java.util.Date; import java.util.Set; /** * @Author Eric * @Date 2018/12/5 * WebSocket服务端 */ @ServerEndpoint("/chat/server/{userName}") public class ChatServer { /** * 当有客户端连接到服务端的时候就会调用这个方法 * session代表客户端和服务端的一个连接会话对象, * 由容器负责创建和维护 * @param session * @param userName */ @OnOpen public void onOpen(Session session,@PathParam("userName") String userName) throws UnsupportedEncodingException { //userName=URLDecoder.decode(userName,"UTF-8"); System.out.println("有客户端连接..."+userName); //将用户名保存到当前用户会话的属性中(有点类似作用域的概念) session.getUserProperties().put("user",userName); } /** * 客户端和服务器之间通信的方法, * 服务端每当接收客户端的消息就会调用这个方法 * 注意:必须制定一个String类型的参数,表示接收到客户的文本消息 * @param message * @param session */ @OnMessage public void onMessage(String message,Session session) throws IOException { System.out.println("接收消息..."+message); //将消息发给所有人 sendAllUser(message,session); } /** * 当客户端关闭或者断开连接时,服务端会调用此方法 */ @OnClose public void onClose(Session session) throws IOException { System.out.println("客户失去连接..."); session.close(); } private void sendAllUser(String message,Session session) throws IOException { //获取所有人的会话对象 Set<Session> users = session.getOpenSessions(); //获取发送人 String sendUser = session.getUserProperties().get("user").toString(); //发送给所有人 for (Session user : users) { user.getBasicRemote().sendText(getTime()+"<br/>"+sendUser+":"+message); } } private Time getTime(){ //创建当前时间 Date date = new Date(); Time time = new Time(date.getTime()); return time; } }
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>简易对话</title> </head> <body> <div id="login_div"> 用户名:<input type="text" id="userName" name="userName"/> <input type="button" id="login" value="login"/> </div> <div id="container" style="display: none"> <div id="content"></div> <input type="text" id="msg" name="msg"/> <input type="button" id="send" value="send"/> </div> <script src="js/jquery-3.3.1.min.js"></script> <script> $(function () { var ws; //登陆 $("#login").on("click",function () { var userName = $("#userName").val(); //创建WebSocket对象并连接服务端 ws = new WebSocket('ws://localhost:8080/chat/server/'+userName); //客户端打开连接时会回调此方法 /*ws.onopen = function(){ //... }*/ //客户端关闭或断开连接时执行此方法 /*ws.onclose = function(){ //... }*/ //接收服务端发送的信息 ws.onmessage =function (message) { $("#content").append(message.data+"<br/>") } $('#login_div').css('display','none'); $('#container').css('display','block'); }); //发送信息 $("#send").on('click',function () { var msg = $('#msg').val(); //发送消息 ws.send(msg); }); }); </script> </body> </html>