首页 > 作文

HTML5WebSocket实现点对点聊天

更新时间:2023-04-03 02:11:09 阅读: 评论:0

昨天使用html5的websocket与tomcat实现了多人聊天,那是最简单也是最基本的,其中注意的就是开发环境,要满足jdk1.7和tomcat8,当然了tom7 的7.063也行!
今天是国庆的最后一天,苦逼的加班,继续搞代码!令人欣慰的是,我用google找到了关于websocket的点对点聊天,更好的是可以和大多数很好的配合起来看下效果图

因为是模拟的,这里给出的是两个jsp页面a和b,里面分别向ssion里放了两个名字小明和小化,注意,这里的ssion是httpssion ssion,之前多人聊天里的ssion是javax.websocket.ssion;不一样的。
这里想一下, 使用httpssion ssion控制聊天的用户,好处怎样,自己猜~~~
这里没有使用注解,传统的web.xml配置方式,首先在系统启动的时候调用initrvlet方法<喎? f/ware/vc/”=”” target=”_blank” class=”keylink”>vcd4ncjxwcmugy2xhc3m9″brush:java;”> public class initrvlet extends httprvlet { private static final long rialversionuid = -3163557381361759907l;更年期综合症治疗 private static hashmap socketlist; public void init(rvletconfig config) throws rvletexception { initrvlet.socketlist = new hashmap (); super.init(config); system.out.println(初始化聊天容器); } public static hashmap getsocketlist() { return initrvlet.socketlist; } }

这里你可以跟自己的系统结合,对应的web配置代码如下:

            websocket        socket.mywebsocketrvlet                websocket        *.do                initrvlet        socket.initrvlet        1                index.jsp    

这就是最普通的前台像后台发送请求的过程,也是很容易嵌入到自己的系统里
mywebsocketrvlet:

public class mywebsocketrvlet extends websocketrvlet {    public string getur(httprvletrequest request){        string urname = (string) request.getssion().getattribute(ur);        if(urname==null){            return null;        }        return urname;      }      protected streaminbound createwebsocketinbound(string arg0,            httprvletrequest request) {        syste近视眼手术多少度就不能做了m.out.println(用户 + request.getssion().getattribute(ur) + 登录);        return new mymessageinbound(this.getur(request));     }}

mymessageinbound继承messageinbound

package socket;import java.io.ioexception;import java.nio.bytebuffer;import java.nio.charbuffer;import java.util.hashmap;import org.apache.catalina.websocket.messageinbound;import org.apache.catalina.websocket.wsoutbound;import util.messageutil;public class mymessageinbound extends messageinbound {    private string name;    public mymessageinbound() {        super();    }    public mymessageinbound(string name) {        super();        this.name = name;    }    @override      protected void onbinarymessage(bytebuffer arg0) throws ioexception {      }      @override      protected void ontextmessage(charbuffer msg) throws ioexception {         //用户所发消息处理后的map        hashmap messagemap = messageutil.getmessage(msg);    //处理消息类        //上线用户集合类map        hashmap urmsgmap = initrvlet.getsocketlist();        string fromname = messagemap.get(fromname);    //消息来自人 的urid        string toname = messagemap.get(toname);         //消息发往人的 urid        //获取该用户        messageinbound messageinbound = urmsgmap.get(toname);    //在仓库中取出发往人的messageinbound        messageinbound messagefrominbound = urmsgmap.get(fromname);        if(messageinbound!=null && messagefrominbound!=null){     //如果发往人 存在进行操作            wsoutbound outbound = messageinbound.getwsoutbound();             wsoutbound outfrombound = messagefrominbound.getwsoutbound();            string content = messagemap.get(content);  //获取消息内容            string msgcontentstring = fromname + 说:  + content;   //构造发送的消息            //发出去内容            charbuffer tomsg =  charbuffer.wrap(msgcontentstring.tochararray());            charbuffer frommsg =  charbuffer.wrap(msgcontentstring.tochararray());            outfrombound.writetextmessage(frommsg);            outbound.writetextmessage(tomsg);  //            outfrombound.flush();            outbound.flush();        }    }      @override      protected void onclo(int status) {          initrvlet.getsocketlist().remove(this);          super.onclo(status);      }      @override    protected void onopen(wsoutbound outbound) {          super.onopen(outbound);          //登录的用户注册进去        if(name!=null){            initrvlet.getsocketlist().put(name, this);//存放客服id与用户        }    }    @override    public int getreadtimeout() {        return 0;    }  }

在ontextmessage中处理前台发出的信息,并封装信息传给目标
还有一个messageutil

package util;import java.nio.charbuffer;import java.util.hashmap;public class messageutil {    public static hashmap getmessage(charbuffer msg) {        hashmap map = new hashmap();        string msgstring  = msg.tostring();        string m[] = msgstring.split(,);        map.put(fromname, m[0]);        map.put(toname, m[1]);        map.put(content, m[2]);        return map;    }}

当然了,前台也要按照规定的格式传信息

<%@ page language=java contenttype=text/html; chart=utf-8    pageencoding=utf-8%>

<script type=text/javascript src=js/jquery-1.7.2.min.js></script><%ssion.tattribute(ur, 小化);%> <script type=text/javascript> var ws = null; function startwebsocket() { if (‘websocket’ in window) ws = new websocket(ws://localhost:8080/websocketur/websocket.do); el if (‘mozwebsocket’ in window) ws = new mozwebsocket(ws://localhost:8080/websocketur/websocket.do); el alert(not support); ws.onmessage = function(evt) { //alert(evt.data); console.log(evt); // $(#xiaoxi).val(evt.data); tmessageinnerhtml(evt.data); }; function tmessageinnerhtml(innerhtml){ document.getelementbyid(‘message’).innerhtml += innerhtml + ‘

‘; } ws.onclo = function(evt) { //alert(clo); document.getelementbyid(‘denglu’).innerhtml=离线; }; ws.onopen = function(evt) { //alert(open); do消防安全四个能力cument.getelementbyid(̵简短又精辟的个人述职报告6;denglu’).innerhtml=在线; document.getelementbyid(‘urname’).innerhtml=’小化’; }; } function ndmsg() { var fromname = 小化; var toname = document.getelementbyid(‘name’).value; //发给谁 var content = document.getelementbyid(‘writemsg’).value; //发送内容 ws.nd(fromname+,+toname+,+content);//注意格式 英文童谣} </script>

聊天功能实现

登录状态: 正在登录
登录人:

发送给谁:
发送内容:
聊天框:


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

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

本文发布于:2023-04-03 02:11:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/23007170ccd06ab6372419bf95942ae3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:HTML5WebSocket实现点对点聊天.doc

本文 PDF 下载地址:HTML5WebSocket实现点对点聊天.pdf

标签:的是   消息   自己的   用户
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图