• 大小: 1.59MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-10
  • 语言: 其他
  • 标签: websocket  

资源简介

实现websocket向指定的用户发送信息,只有指定的人可以收到信息,其他人无法收到

资源截图

代码片段和文件信息

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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-01 15:22  WebSocket2\
     文件         833  2018-03-01 13:52  WebSocket2\.classpath
     文件        1043  2018-03-01 13:52  WebSocket2\.project
     目录           0  2018-03-01 15:22  WebSocket2\.settings\
     文件         567  2018-03-01 13:52  WebSocket2\.settings\.jsdtscope
     文件         364  2018-03-01 13:52  WebSocket2\.settings\org.eclipse.jdt.core.prefs
     文件         482  2018-03-01 13:52  WebSocket2\.settings\org.eclipse.wst.common.component
     文件         345  2018-03-01 13:52  WebSocket2\.settings\org.eclipse.wst.common.project.facet.core.xml
     文件          49  2018-03-01 13:52  WebSocket2\.settings\org.eclipse.wst.jsdt.ui.superType.container
     文件           6  2018-03-01 13:52  WebSocket2\.settings\org.eclipse.wst.jsdt.ui.superType.name
     目录           0  2018-03-01 15:22  WebSocket2\WebContent\
     目录           0  2018-03-01 15:22  WebSocket2\WebContent\meta-INF\
     文件          39  2018-03-01 13:52  WebSocket2\WebContent\meta-INF\MANIFEST.MF
     目录           0  2018-03-01 15:22  WebSocket2\WebContent\WEB-INF\
     目录           0  2018-03-01 15:22  WebSocket2\WebContent\WEB-INF\lib\
     文件     1930692  2018-02-03 11:54  WebSocket2\WebContent\WEB-INF\lib\javaee-api-7.0.jar
     文件         641  2018-03-01 13:52  WebSocket2\WebContent\WEB-INF\web.xml
     文件        3425  2018-03-01 14:22  WebSocket2\WebContent\index.jsp
     文件        3424  2018-03-01 14:22  WebSocket2\WebContent\index2.jsp
     文件        3424  2018-03-01 14:47  WebSocket2\WebContent\index3.jsp
     目录           0  2018-03-01 15:22  WebSocket2\build\
     目录           0  2018-03-01 15:22  WebSocket2\build\classes\
     目录           0  2018-03-01 15:22  WebSocket2\build\classes\com\
     目录           0  2018-03-01 15:22  WebSocket2\build\classes\com\aa\
     目录           0  2018-03-01 15:22  WebSocket2\build\classes\com\aa\websocket\
     文件        5027  2018-03-01 15:06  WebSocket2\build\classes\com\aa\websocket\WebSocketTest.class
     目录           0  2018-03-01 15:22  WebSocket2\src\
     目录           0  2018-03-01 15:22  WebSocket2\src\com\
     目录           0  2018-03-01 15:22  WebSocket2\src\com\aa\
     目录           0  2018-03-01 15:22  WebSocket2\src\com\aa\websocket\
     文件        5655  2018-03-01 15:06  WebSocket2\src\com\aa\websocket\WebSocketTest.java
............此处省略0个文件信息

评论

共有 条评论