资源简介

websocket 即时通讯案例 ,一对一聊天,多人聊天 java 版本

资源截图

代码片段和文件信息

package com.aa.websocket;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端
 * 注解的值将被用于监听用户连接的终端访问URL地址客户端可以通过这个URL来连接到WebSocket服务器端
 * @ServerEndpoint 可以把当前类变成websocket服务类
 */
@ServerEndpoint(“/websocket/{userno}“)
public class WebSocketTest {
    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
    private static int onlineCount = 0;
    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
    private static ConcurrentHashMap webSocketSet = new ConcurrentHashMap();
    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session WebSocketsession;
    //当前发消息的人员编号
    private String userno = ““;

    /**
     * 连接建立成功调用的方法
     *
     * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
     */
    @OnOpen
    public void onOpen(@PathParam(value = “userno“) String param Session WebSocketsession EndpointConfig config) {
        System.out.println(param);
        userno = param;//接收到发送消息的人员编号
        this.WebSocketsession = WebSocketsession;
        webSocketSet.put(param this);//加入map中
        addOnlineCount();           //在线数加1
        System.out.println(“有新连接加入!当前在线人数为“ + getOnlineCount());
    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        if (!userno.equals(““)) {
            webSocketSet.remove(userno);  //从set中删除
            subOnlineCount();           //在线数减1
            System.out.println(“有一连接关闭!当前在线人数为“ + getOnlineCount());
        }
    }

    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息
     * @param session 可选的参数
     */
    @SuppressWarnings(“unused“)
// @OnMessage
    public void onMessage(String message Session session) {
        System.out.println(“来自客户端的消息:“ + message);
//        session.get
        //群发消息
        if (1 < 2) {
            sendAll(message);
        } else {
            //给指定的人发消息
            sendToUser(message);
        }
    }

    /**
     * 给指定的人发送消息
     * @param message
     */
    @OnMessage
    public void sendToUser(String message) {
        String sendUserno = message.split(“[|]“)[1];
        String sendMessage = message.split(“[|]“)[0];
        String now = getNowTime();
        try {
            if (webSocketSet.get(sendUserno) != null) {
                webSocketSet.get(sendUserno).sendMessage(now + “用户“ + userno + “发来消息:“ + “ 
 “ + sendMessage);
            } else {
                System.out.println(“当前用户不在线“);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 给所有人发消息
     * @param message
     */
    private void sendAll(String

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5655  2018-03-01 15:06  WebSocket\src\com\aa\websocket\WebSocketTest.java

     文件       3425  2018-03-01 14:22  WebSocket\WebContent\index.jsp

     文件       3424  2018-03-01 14:22  WebSocket\WebContent\index2.jsp

     文件       3424  2018-03-01 14:47  WebSocket\WebContent\index3.jsp

     文件         39  2018-03-01 13:52  WebSocket\WebContent\meta-INF\MANIFEST.MF

     文件    1930692  2018-02-03 11:54  WebSocket\WebContent\WEB-INF\lib\javaee-api-7.0.jar

     文件        641  2018-03-01 13:52  WebSocket\WebContent\WEB-INF\web.xml

     目录          0  2019-03-07 11:03  WebSocket\src\com\aa\websocket

     目录          0  2019-03-07 11:03  WebSocket\src\com\aa

     目录          0  2019-03-07 11:03  WebSocket\WebContent\WEB-INF\lib

     目录          0  2019-03-07 11:03  WebSocket\src\com

     目录          0  2019-03-07 11:03  WebSocket\WebContent\meta-INF

     目录          0  2019-03-07 11:03  WebSocket\WebContent\WEB-INF

     目录          0  2019-03-07 11:03  WebSocket\src

     目录          0  2019-03-07 11:03  WebSocket\WebContent

     目录          0  2019-03-07 11:03  WebSocket

----------- ---------  ---------- -----  ----

              1947300                    16


评论

共有 条评论