栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

websocket使用教程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

websocket使用教程

maven引入

    org.springframework
    spring-websocket
    5.0.8.RELEASE
    compile

千万别使用下图依赖,别问我为什么,我也不知道,下图依赖可能会出现会注入报serverEndpointExporter错误,如果没有就当我没有说

 

  1. 配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig {
   
   
   @Bean
   public ServerEndpointExporter serverEndpointExporter() {
      return new ServerEndpointExporter();
   }
}



  1. 会话服务器

import com.alibaba.fastjson.JSON;
import org.springblade.modules.websocket.model.Message;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;



@Component
@ServerEndpoint("/chat")
public class WebSocketChatServer {

    
    private static Map onlineSessions = new ConcurrentHashMap<>();

    
    @onOpen
    public void onOpen(Session session) {
        onlineSessions.put(session.getId(), session);
        sendMessageToAll(Message.jsonStr(Message.ENTER, "", "", onlineSessions.size()));
    }
    

    @onMessage
    public void onMessage(Session session, String jsonStr) {
        Message message = JSON.parseObject(jsonStr, Message.class);
        sendMessageToAll(Message.jsonStr(Message.SPEAK, message.getUsername(), message.getMsg(), onlineSessions.size()));
    }



    

    @onClose
    public void onClose(Session session) {
        onlineSessions.remove(session.getId());
        sendMessageToAll(Message.jsonStr(Message.QUIT, "", "", onlineSessions.size()));
    }



    

    @onError
    public void onError(Session session, Throwable error) {
        error.printStackTrace();
    }



    
    private static void sendMessageToAll(String msg) {
        onlineSessions.forEach((id, session) -> {
            try {
                session.getBasicRemote().sendText(msg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}
  1. 聊天消息类
import com.alibaba.fastjson.JSON;




public class Message {
   
    public static final String ENTER = "ENTER";
    public static final String SPEAK = "SPEAK";
    public static final String QUIT = "QUIT";
    private String type;//消息类型
    private String username; //发送人
    private String msg; //发送消息
    private int onlineCount; //在线用户数
    public static String jsonStr(String type, String username, String msg, int onlineTotal) {
        return JSON.toJSONString(new Message(type, username, msg, onlineTotal));
    }



    public Message(String type, String username, String msg, int onlineCount) {
        this.type = type;
        this.username = username;
        this.msg = msg;
        this.onlineCount = onlineCount;
    }



    public static String getENTER() {
        return ENTER;
    }



    public static String getSPEAK() {
        return SPEAK;
    }



    public static String getQUIT() {
        return QUIT;
    }



    public String getType() {
        return type;
    }



    public void setType(String type) {
        this.type = type;
    }



    public String getUsername() {
        return username;
    }



    public void setUsername(String username) {
        this.username = username;
    }



    public String getMsg() {
        return msg;
    }



    public void setMsg(String msg) {
        this.msg = msg;
    }



    public int getonlineCount() {
        return onlineCount;
    }



    public void setonlineCount(int onlineCount) {
        this.onlineCount = onlineCount;
    }
}

前端代码

mounted() {
 this.connection();
},
methods: {connection() {
 if (typeof (WebSocket) == "undefined") {
  console.log("您的浏览器不支持WebSocket");
 } else {
  console.log("您的浏览器支持WebSocket");
  //实现化WebSocket对象,指定要连接的服务器地址与端口  建立连接
  //等同于socket = new WebSocket("ws://localhost:8083/checkcentersys/websocket/20");
  this.socket = new WebSocket("ws://localhost:8715/chat".replace("http", "ws"));
  //打开事件
  this.socket.onopen = function () {
   console.log("Socket 已打开");
   //socket.send("这是来自客户端的消息" + location.href + new Date());
  };
  //获得消息事件
  this.socket.onmessage = function (msg) {
   console.log(msg.data);
   //发现消息进入    开始处理前端触发逻辑
  };
  //关闭事件
  this.socket.onclose = function () {
   console.log("Socket已关闭");
  };
  //发生了错误事件
  this.socket.onerror = function () {
   alert("Socket发生了错误");
   //此时可以尝试刷新页面
  }
 }
}
}, 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号