哇,好长时间没有写博客了,最近公司在改善前端技术然我们学什么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", "小玲");%>聊天功能实现
登录状态:正在登录登录人:发送给谁:发送内容:聊天框:
好了 开启你的聊天之旅吧 ~