博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA WebSocKet ( 简单的聊天室 )
阅读量:7010 次
发布时间:2019-06-28

本文共 3480 字,大约阅读时间需要 11 分钟。

1, 前端代码 登入页 -> login.html

    
聊天室登入接口 请输入账号名:

2, 前端代码 聊天页面 -> ChatRoom

    
聊天室

3, JAVA后台处理代码 WebSocket需要配置才能起作用,

  如何配置请参考另一篇 http://www.cnblogs.com/lovling/p/6716612.html

package socket_web;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/ChatRoomForWebSocket")public class ChatRoomForWebSocket {    public static List
userNames = new ArrayList
(); public static List
sessions = new ArrayList
(); @OnOpen public void open(Session session) { try { String userName = session.getQueryString(); userName = userName.split("=")[1]; userName = URLDecoder.decode(userName, "utf-8"); if (userNames.contains(userName)) { session.getBasicRemote().sendText("error"); } else { userNames.add(userName); sessions.add(session); String msg = "{\"type\":0, \"data\":[" + jsonName() + "]}"; pushMsg(msg); } System.out.println(userName + " 登入了"); } catch (Exception e) { e.printStackTrace(); } } @OnClose public void close(Session session) { try { String userName = session.getQueryString(); userName = userName.split("=")[1]; userName = URLDecoder.decode(userName, "utf-8"); if (sessions.contains(session)){ userNames.remove(userName); sessions.remove(session); } String msg = "{\"type\":0, \"data\":[" + jsonName() + "]}"; pushMsg(msg); } catch (Exception e) { System.out.println("关闭失败"); } } @OnMessage public void message(Session session, String msg) { try { String userName = session.getQueryString(); userName = userName.split("=")[1]; userName = URLDecoder.decode(userName, "utf-8"); Date date = new Date(); SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = timeFormat.format(date); msg = "{\"type\":1, \"data\":{\"name\":\"" + userName + "\", \"msg\":\"" + msg + "\",\"time\":\"" + time + "\" }}"; pushMsg(msg); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } // 推送消息给所有用户 public static void pushMsg(String msg) { try { for (Session session : sessions) { session.getBasicRemote().sendText(msg); } } catch (Exception e) { System.out.println("发送失败"); } } // 拼接所有用户名 public static String jsonName() { StringBuilder nameStr = new StringBuilder(100); for (String name : userNames) { nameStr.append("{\"name\":\"" + name + "\"},"); } nameStr.delete(nameStr.length() - 1, nameStr.length()); return nameStr.toString(); }}

 

你可能感兴趣的文章
分布式编译工具
查看>>
对我而言晦涩的递归
查看>>
React Native 从入门到原理
查看>>
iOS如何随意的穿插跳跃,push来pop去
查看>>
使用maven编译Java项目 http://www.tuicool.com/articles/YfIfIrq
查看>>
Strut2中的session和servlet中的session的区别
查看>>
自定义adapter实现listview双列显示
查看>>
MyBatis——实现关联表查询
查看>>
struts2的MVC模式
查看>>
cocos2d-x JS 复选按钮checkBox的单选与多选
查看>>
表格花式效果
查看>>
Thrift 基于zookeeper改造模式
查看>>
rsync与cwRsync
查看>>
图像的形态学处理
查看>>
Elasticsearch5.5 部署Head插件
查看>>
VC++使用IMAPI调用Outlook邮箱客户端和Foxmail邮箱客户端遇到的问题
查看>>
Python字符编码以及循环机制介绍
查看>>
ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系
查看>>
远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo、SpringClound对比...
查看>>
golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web
查看>>