websocket实现简单的聊天,websocket实现在线聊天

  websocket实现简单的聊天,websocket实现在线聊天

  昨天使用HTML5的求转发到与雄猫实现了多人聊天,那是最简单也是最基本的,其中注意的就是开发环境,要满足jdk1.7和tomcat8,当然了tom7的7.063也行!

  今天是国庆的最后一天,苦逼的加班,继续搞代码!令人欣慰的是,我用谷歌找到了关于求转发到的点对点聊天,更好的是可以和大多数系统很好的配合起来看下效果图

  因为是模拟的,这里给出的是两个JSP页面A和b,里面分别向会议里放了两个名字小明和小化,注意,这里的会议是会话会话,之前多人聊天里的会议是javax。web套接字。会话;不一样的。

  这里想一下,使用会话会话控制聊天的用户,好处怎样,自己猜~~~

  这里没有使用注解,传统的web.xml配置方式,首先在系统启动的时候调用InitServlet方法

  公共类InitServlet扩展http servlet { private static final long serialVersionUID=-3163557381361759907 l;私有静态HashMapString,MessageInbound socketList .公共void初始化(servlet配置配置)抛出servlet异常{ init servlet。socket list=new hashmap字符串,message inbound();超级. init(配置);System.out.println(初始化聊天容器);} public static HashMapString,message inbound get socket list(){ return init servlet。套接字列表;} }这里你可以跟自己的系统结合,对应的网配置代码如下:

  ?可扩展标记语言版本=1.0 编码=UTF八号?我们B- app版本= 3.0 xmlns= http://Java。星期日com/XML/ns/javaee xmlns:xsi= http://www。w3。org/2001/XML schema-instance xsi:schema location= http://Java。星期日com/XML/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd servlet servlet-name web socket/servlet-name servlet-class socket。MyWebSocketServlet/servlet-class/servlet servlet-mapping servlet-name web socket/servlet-name URLdo/URL-pattern/servlet-mapping servlet servlet-name init servlet/servlet-name servlet-classsocket.InitServlet/servlet-class load-on-startup 1/load-on-startup!-方法执行的级别- /servlet欢迎文件列表welcome-fileindex.jsp/welcome-file/欢迎文件列表/web应用程序这就是最普通的前台像后台发送请求的过程,也是很容易嵌入到自己的系统里

  MyWebSocketServlet:

  公共类MyWebSocketServlet扩展WebSocketServlet { public String getUser(http servlet请求){ String userName=(String)请求。getsession().getAttribute(“用户");if(userName==null){返回null}返回用户名;}受保护的stream inbound createWebSocketInbound(String arg 0,http servlet请求request){ system。出去。println(用户request.getSession().getAttribute(user )登录);返回新的MyMessageInbound(this。getuser(request));} }我的邮件入站继承消息入站

  包装插座;导入Java。io。io异常;导入Java。nio。字节缓冲区;导入Java。nio。充电缓冲器;导入Java。util。hashmap导入组织。阿帕奇。卡特琳娜。web套接字。邮件入站;导入org。阿帕奇。卡特琳娜。web套接字。ws出站;导入实用工具.MessageUtil公共类MyMessageInbound扩展了消息入站{私有字符串名称;public MyMessageInbound(){ super();} public MyMessageInbound(字符串名称){ super();this.name=name} @在二进制消息上覆盖受保护的void(字节缓冲区参数0)抛出io异常{ } @覆盖文本消息上的受保护void(字符缓冲区消息)抛出IOException { //用户所发消息处理后的map HashMapString,String message map=message util。getmessage(msg);//处理消息类//上线用户集合类map HashMapString,message inbound userMsgMap=init servlet。getsocket list();来自名称=消息映射的字符串。get(“from name”);//消息来自人的使用者辩证码字符串to name=消息映射。get( to name );//消息发往人的userId //获取该用户message inbound message inbound=usermsgmap。get(至名);//在仓库中取出发往人的message inbound message inbound message from inbound=usermsgmap。get(from name);if(messageInbound!=null messageFromInbound!=null){ //如果发往人存在进行操作ws outbound outbound=消息入站。getws outbound();ws从入站出站。getwsoutbound();字符串内容=消息映射。get( content );//获取消息内容字符串msgContentString=from name 说: 内容;//构造发送的消息//发出去内容char缓冲区toMsg=char缓冲区。wrap(msgcontentstring。tochararray());来自消息的字符缓冲区=字符缓冲区。wrap(msgcontentstring。tochararray());外出。编写文本消息(来自msg);出站。写短信(toMsg);//outrombound。flush();出站。flush();} } @关闭时覆盖受保护的void(int status){ init servlet。getsocketlist().去掉(这个);super.onClose(状态);} @在打开时覆盖受保护的void(ws出站出站){ super。打开时(出站);//登录的用户注册进去如果(名字!=null){ init servlet。getsocket list().放(名,本);//存放客服身份与用户} } @ Override public int getread time out(){ return 0;} }在onTextMessage中处理前台发出的信息,并封装信息传给目标

  还有一个messageutil

  包跑龙套导入Java。nio。充电缓冲器;导入Java。util。hashmappublic class message util { public static hashmap String,String getMessage(char buffer msg){ hashmap String,String map=new HashMapString,String();字符串msg字符串=msg。tostring();String m[]=msgString.split(,);map.put(fromName ,m[0]);map.put(toName ,m[1]);map.put(content ,m[2]);返回地图;}}当然了,前台也要按照规定的格式传信息

  % @ page language= Java content type= text/html;charset=UTF-8 页面编码= UTF-8 %!DOCTYPE htmlhtmlheadmeta http-equiv= Content-Type Content= text/html;charset=UTF-8 标题索引/标题脚本类型= text/JavaScript src= js/jquery-1。7 .2 .量滴js /script % session。设置属性(用户,小化);% script type= text/JavaScript var ws=null;function start web socket(){ if( web socket in window)ws=new web socket( ws://localhost:8080/web socket user/web socket。do’);else if( MozWebSocket in window)ws=new MozWebSocket( ws://localhost:8080/WebSocketUser/web socket。do’);else alert("不支持");ws。on message=函数(evt){//alert(evt。数据);控制台。日志(evt);//$( #小溪)。val(evt。数据);setMessageInnerHTML(evt。数据);};函数setMessageInnerHTML(innerHTML){ document。getelementbyid(“message”).innerHTML=innerHTML br/;} ws。on close=function(evt){//alert( close );document.getElementById(邓璐)。innerHTML=离线;};ws。on open=function(evt){//alert( open );document.getElementById(邓璐)。innerHTML=在线;文档。getelementbyid(“用户名”).innerHTML=小化;};}函数send msg(){ var from name=小化;var to name=document。getelementbyid( name ).价值;//发给谁var内容=文档。getelementbyid(写入消息).价值;//发送内容ws.send(fromName , toName , content);//注意格式}/script/head body onload= start web socket();p聊天功能实现/p登录状态:span id=邓璐style= color:红色;正在登录/spanbr登录人:span id=用户名/spanbrbbr发送给谁:输入类型=text id=name value=小明/inputbr发送内容:输入类型=text id=writeMsg/inputbr聊天框:div id= message style= height:250 px;宽度:280像素边框:1px纯色;溢出:自动;/div br input type= button value= send onclick= sendMsg()/input/body/html这是A.jsp页面,B同上

  通过以上代码,就可以实现一个点对点的聊天功能,如果做的大,可以做成一个网版的聊天系统,包括聊天室和单人聊天,都说求转发到不支持二进制的传输,但是看到个大流说了这样的话

  不过现在做下来感觉使用二进制的意义不是很大。很久以前就一直困混,怎么都说射流研究…不支持二进制,发现其实只是一堆坑货对这个没研究。(用的是文件阅读器)

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: