• 个人博客


    2021年5月17日:

    今天写了一个简单的后端代码是关于websocket的:

    package com.atguigu.crud.utils;

    import javax.websocket.*;
    import javax.websocket.server.PathParam;
    import javax.websocket.server.ServerEndpoint;
    import org.springframework.stereotype.Component;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;

    @ServerEndpoint("/websocket/{userno}")
    @Component
    public class websocket {
    private static ConcurrentHashMap<String, websocket> webSocketSet = new ConcurrentHashMap<String, websocket>();
    private static Map<String, List<String>> map = new HashMap<>();
    private static List<String> list = new ArrayList<>();
    private Session WebSocketsession;
    private String userno = "";

    @OnOpen
    public void onOpen(@PathParam(value = "userno") String param, Session WebSocketsession, EndpointConfig config)
    throws IOException {
    userno = param;
    this.WebSocketsession = WebSocketsession;
    websocket webSocketServer = webSocketSet.get(param);
    if (webSocketServer != null) { // 同样业务的连接已经在线,则把原来的挤下线。
    webSocketServer.WebSocketsession.getBasicRemote().sendText(param + "重复连接被挤下线了");
    webSocketServer.WebSocketsession.close();
    }
    webSocketSet.put(param, this);
    if (map.get(param) != null) {
    webSocketSet.get(param).sendMessage(param);
    }
    }

    @OnClose
    public void onClose() {
    if (!userno.equals("")) {
    webSocketSet.remove(userno);
    }
    }

    @OnMessage
    public void onMessage(String message) {
    if (message.split("[|]")[1].contains(",")) {
    sendAll(message.split("[|]")[1].split(","));
    } else {
    sendToUser(message);
    }
    }
    public void sendToUser(String message) {
    String sendUserno = message.split("[|]")[1];
    String sendMessage = message.split("[|]")[0];
    try {
    if (webSocketSet.get(sendUserno) != null) {
    webSocketSet.get(sendUserno).sendMessage(sendUserno);
    } else {
    if (map.get(sendUserno) == null) {
    map.put(sendUserno, list);
    map.get(sendUserno).add(sendMessage);
    } else {
    map.get(sendUserno).add(sendMessage);
    }
    }
    } catch (IOException e) {
    }
    }

    此段代码还没有完善,只是完成了个人的通信和回复,并且前端代码比较复杂,现在只弄了一些简单的代码:

    function send() {
    var message = "用户" + userno + "向你发送一条入团申请";
    var ToSendUserno = msg.substring(13, msg.length);
    message1 = message + "|" + ToSendUserno;
    websocket.send(message1);
    sendmessage(ToSendUserno, messagec, "申请", userno, imgpath);
    }

    这就是团员发给社长的那个简单的代码

    这是websocket连接的代码:

    if (userno) {
    websocket.onopen = function() {
    if (msg.length > 0) {
    if (msg.indexOf("成功") >= 0) {
    alert("申请成功!请等待社长回应");
    send();
    window.location.href = "${pageContext.request.contextPath}/club/sousuo";
    } else {
    alert(msg);
    }
    }
    }
    websocket.onmessage = function(event) {
    messageupdate(event.data);
    }
    window.onbeforeunload = function() {
    websocket.close();
    }
    }

  • 相关阅读:
    java 多线程 CountDownLatch用法
    android的消息处理机制(图+源码分析)——Looper,Handler,Message
    Handler 总结
    Android常用UI编程_TextView实现跑马灯效果
    Android常用UI编程_TextView实现Activity转变
    Android常用UI编程_TextView显示图片和文字(包含超链接)
    Http编程 ___ 1
    Iterator用法
    增强型for循环
    Android_文件下载
  • 原文地址:https://www.cnblogs.com/yitiaokuailedexiaojingyu/p/14872288.html
Copyright © 2020-2023  润新知