百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> HTML5WebSocket点对点谈天实现办法-
分享文章到:

HTML5WebSocket点对点谈天实现办法-

发布时间:08/01 来源:未知 浏览: 关键词:
本文主要和大家介绍HTML5WebSocket实现点对点谈天的示例代码的相干材料,小编觉得挺不错的,此刻分享给大家,也给大家做个参照 。一起追随小编过来看看吧,但愿能帮忙到大家。 昨天运用HTML5的websocket与Tomcat实现了多人谈天,那是最简略也是最根本的,其中注意的就是开发环境,要知足jdk1.7和tomcat8,固然了tom7 的7.063也行!

本文主要和大家介绍HTML5 WebSocket实现点对点谈天的示例代码的相干材料,小编觉得挺不错的,此刻分享给大家,也给大家做个参照 。一起追随小编过来看看吧,但愿能帮忙到大家。

public class InitServlet extends HttpServlet {
    private static final long serialVersionUID = -3163557381361759907L;  
    private static HashMap socketList;    
    public void init(ServletConfig config) throws ServletException {    
        InitServlet.socketList = new HashMap();    
        super.init(config);    
        System.out.println("初始化谈天容器");    
    }    

    public static HashMap getSocketList() {    
        return InitServlet.socketList;    
    }    
}

这里你可以跟本人的系统联合,对应的web配置代码如下:





    
        websocket
        socket.MyWebSocketServlet
    
    
        websocket
        *.do
    

    
        initServlet
        socket.InitServlet
        1
    
    
        index.jsp
    

这就是最普通的前台像后台发送要求的历程,也是很容易嵌入到本人的系统里

MyWebSocketServlet:


public class MyWebSocketServlet extends WebSocketServlet {
    public String getUser(HttpServletRequest request){
        String userName = (String) request.getSession().getAttribute("user");
        if(userName==null){
            return null;
        }
        return userName;  
    }  
    protected StreamInbound createWebSocketInbound(String arg0,
            HttpServletRequest request) {
        System.out.println("会员" + request.getSession().getAttribute("user") + "登录");
        return new MyMessageInbound(this.getUser(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 userMsgMap = InitServlet.getSocketList();
        String fromName = messageMap.get("fromName");    //新闻来自人 的userId
        String toName = messageMap.get("toName");         //新闻发往人的 userId
        //猎取该会员
        MessageInbound messageInbound = userMsgMap.get(toName);    //在仓库中掏出发往人的MessageInbound
        MessageInbound messageFromInbound = userMsgMap.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 onClose(int status) {  
        InitServlet.getSocketList().remove(this);  
        super.onClose(status);  
    }  

    @Override
    protected void onOpen(WsOutbound outbound) {  
        super.onOpen(outbound);  
        //登录的会员注册进去
        if(name!=null){
            InitServlet.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; charset=UTF-8"
    pageEncoding="UTF-8"%>




Index

    打赏
    



    

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板