博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSR356标准Java WebSocket实现多人 or 单人聊天室demo
阅读量:5458 次
发布时间:2019-06-15

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

哇,好长时间没有写博客了,最近公司在改善前端技术然我们学什么react+antd+dva 这种东西看的我头昏脑涨,还没几天就让我做技术调研弄弄websocket实现点对点聊天,于是乎就开始茫茫的百度生涯。

正片:首先感谢redstarofsleep这位老哥和他的博客给我的启发他的博客地址

别的不说了直接上代码了

 

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.util.Iterator;import java.util.concurrent.ConcurrentHashMap;import java.util.logging.Logger;/** * @author xuyuhao * @version 1.0 * @since 2018/3/21 */@ServerEndpoint(value = "/websocket/{user}")public class MyServerEndpoint {    private Session session;    private static final Logger sysLogger = Logger.getLogger("sysLog");    //定义一个集合 用于存储打开通道的用户    private static ConcurrentHashMap map = new ConcurrentHashMap();    @OnOpen    public void open(Session session, @PathParam(value = "user") String user) {        //判断用户是否重复        if(!map.containsKey(user)){            //塞入map中            map.put(user,session);        }        sysLogger.info("*** WebSocket opened from sessionId " + session.getId());    }    @OnMessage    public void inMessage(String message) throws Exception {        //前端传过来的信息格式为 ‘发送人,接收人,信息’        String[] list = message.split(",");        message = list[0]+":"+list[2];        //如果接收人为全体成员        if("all".equals(list[1])){            for (Object o : map.keySet()) {                ((Session)map.get(o)).getBasicRemote().sendText(message);            }        }else{            //获取发送人            Session from = (Session)map.get(list[0]);            //获取接收人            Session to = (Session)map.get(list[1]);            if(to!=null&&from!=null){                //发送                from.getBasicRemote().sendText(message);                to.getBasicRemote().sendText(message);            }else {                from.getBasicRemote().sendText("对方已离线");            }        }    }    @OnClose    public String end() throws Exception{        return "*** WebSocket closed from sessionId " + this.session.getId();    }}

 

然后定义几个页面直接上代码了

<%@ page language="java" contentType="text/html; charset=UTF-8"         pageEncoding="UTF-8"%>    
Index <%session.setAttribute("user", "小明");%>

聊天功能实现

登录状态:正在登录
登录人:
发送给谁:
发送内容:
聊天框:

第二个界面

<%@ page language="java" contentType="text/html; charset=UTF-8"         pageEncoding="UTF-8" %>    
Index <%session.setAttribute("user", "小摩纳");%>

聊天功能实现

登录状态:正在登录
登录人:
发送给谁:
发送内容:
聊天框:

第三个界面

<%@ page language="java" contentType="text/html; charset=UTF-8"         pageEncoding="UTF-8"%>    
Index <%session.setAttribute("user", "小玲");%>

聊天功能实现

登录状态:正在登录
登录人:
发送给谁:
发送内容:
聊天框:

这个代码只是一个小demo,估计后期能改动的点非常多~

好了 开启你的聊天之旅吧 ~

 

转载于:https://www.cnblogs.com/zlxyh/p/8624931.html

你可能感兴趣的文章
cowboy rest
查看>>
setChecked方法触发onCheckedChanged监听器问题
查看>>
vim php代码规范
查看>>
numpy次方计算
查看>>
centos7 搭建LNMP
查看>>
Python OOP(1)
查看>>
delphi 数据库中Connection与Query连接数量问题思考
查看>>
JS图像变换效果的实现
查看>>
sql function递归
查看>>
【Alpha】Daily Scrum Meeting——blog2
查看>>
struts2 局部类型转换器
查看>>
all与any的用法
查看>>
SpringBoot入门教程(六)SpringBoot2.0统一处理404,500等http错误跳转页
查看>>
mysql 去除重复 Select中DISTINCT关键字的用法
查看>>
JSON
查看>>
poj1006
查看>>
win7下搭建WAMP图解(PHP运行环境:win7+Apache2.2+php5.2.8+MySQL5.5)附安装包
查看>>
二、什么是IBeamMDAA
查看>>
TC SRM 562 div2 B 题
查看>>
搜索算法
查看>>