Vite+Vue根据环境配置Websocket地址

这篇具有很好参考价值的文章主要介绍了Vite+Vue根据环境配置Websocket地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上回说到,利用vite加载不同mode下的配置文件,可以实现不同运行环境下的参数配置。在前端应用中经常使用到Websocket,其地址同样可以在.env中间中配置。

代码

vite.config.ts代码的执行是在createApp之前,不可以在vite.config.ts中使用例如piniarouter等组件。可以使用import.meta.env获取配置文件中的参数

废话少说,直接上代码。

前端

.env.development

# 开发环境配置
NODE_ENV='development'

# 本地服务端口
VITE_PORT=8093

.......

# Websocket服务地址
VITE_WS_URL='ws://localhost:8083'

demo.vue

const wsPath = import.meta.env.VITE_WS_URL + 'ws/demo';
let wsSocket: any;
function wsInit() {
  if (typeof (WebSocket) === 'undefined') {
    console.log("浏览器不支持websocket");
  } else {
    wsSocket = new WebSocket(wsPath);
    wsSocket.onopen = open;
    wsSocket.onerror = error;
    wsSocket.onmessage = getMessage;
  }
}
function open() {
  console.log("websocket连接成功")
}

function error(error: string) {
  console.log("websocket连接错误", error)
}
function getMessage(msg: MessageEvent) {
  let states = msg.data;
  states = JSON.parse(states);
  states.forEach((dataItem: any) => {

  });
}
function send(params: string) {
  wsSocket.send(params)
}

function close(e: any) {
  console.log("websocket连接关闭")
}
onMounted(() => {
  wsInit();
})
onUnmounted(() => {
  wsSocket.onclose = close;
})

后端

Websocket.config.java

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();
    }
}

DemoWebsocketServer.java文章来源地址https://www.toymoban.com/news/detail-825146.html

import io.micrometer.common.util.StringUtils;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

@Slf4j
@Component
@ServerEndpoint(value = "/ws/demo")
public class DemoWebsocketServer {
    private static ConcurrentHashMap<String, DemoWebsocketServer> webSocketMap = new ConcurrentHashMap<>();
    @Getter
    private Session session;

    public String pointsUrl;
    private static StringRedisTemplate stringRedisTemplate;

    @Autowired
    public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {
        DemoWebsocketServer.stringRedisTemplate = stringRedisTemplate;
    }

    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        log.info("{}连接成功", this.getSession());
        webSocketMap.put(session.getId(), this);
        sendMessage("");
    }

    @OnMessage
    public void onMessage(String message) {
        // todo 获取前端发送过来的
    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        //从set中删除
        webSocketMap.remove(this.getSession().getId());
        log.info("断开连接" + this.getSession());
    }

    /**
     * @param error
     */
    @OnError
    public void onError(Throwable error) {
        if (error.getMessage().contains("Broken pipe")) {
            log.info("客户端突然断开连接");
        } else {
            System.out.println("发生错误");
            error.printStackTrace();
        }
    }

    /**
     * 实现服务器主动推送
     */
    public void sendMessage(String message) {
        synchronized (webSocketMap) {
            if (!StringUtils.isEmpty(this.getSession().getId()) && webSocketMap.containsKey(this.getSession()
                    .getId())) {
                try {
                    webSocketMap.get(this.getSession().getId()).getSession().getBasicRemote().sendText(message);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DemoWebsocketServer that = (DemoWebsocketServer) o;
        return Objects.equals(session, that.session) && Objects.equals(pointsUrl, that.pointsUrl);
    }

    @Override
    public int hashCode() {
        return Objects.hash(session, pointsUrl);
    }
}

到了这里,关于Vite+Vue根据环境配置Websocket地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 配置Vite获取内网IP(Vue3项目​ts版本获取本机局域网IP地址)

    参考文章:vue项目获取本机局域网IP地址(vue.config.js版本) 在Vite中,没有vue.config.js文件,而是使用vite.config.js(或vite.config.ts,如果项目使用TypeScript)来配置项目; 1.获取 IP 需要借助  os  模块,需要先安装依赖: 2.其次在vite.config.ts中引用模块  3.接着,添加一个获取本机内

    2024年02月05日
    浏览(45)
  • vue中vite.config.js配置跨域以及环境配置详解

    我们的 .env.development 和 .env.production 文件里面都会有 VITE_APP_ENV 配置: 在我们的 vite.config.js文件中: 以上是 vite.config.js 的配置,上面展示了在不同环境下去请求对应环境的域名并且配置代理进行跨域. 1.在vue.config.js中设置一下代码: 2. 创建axioss实例时,将baseUrl设置为 \\\'/api\\\'

    2024年02月15日
    浏览(53)
  • vue开发者vite多环境配置,终于搞明白了

    在看项目的过程中,发现有类似服务端多环境配置的配置,所以研究了下,在网上有多个方案,选了一个当前在用的吧,另外一个没验证 对于使用Vite构建的Vue项目,可以使用Vite提供的环境变量来实现多环境配置。 Vite 使用  dotenv  从  环境文件目录  中加载环境文件,默认

    2024年02月06日
    浏览(39)
  • vue启动配置npm run serve,动态环境变量,根据不同环境访问不同域名

    首先创建不同环境的配置文件,比如域名和一些常量,创建一个env文件,先看看文件目录 env.dev就是dev环境的域名,.test就是test环境域名,其他同理,然后配置package.json文件 scripts里面就是我们的运行配置,当我们执行npm run dev的时候就会读取env.dev文件里面的配置,其他同理,

    2024年02月12日
    浏览(44)
  • vue3之vite创建h5项目1(创建vite项目、配置IP访问项目、配置多环境变量与预览打包生产效果、配置别名)

    初始化项目模块 添加环境变量文件,每个文件写入配置,定义 env 环境变量前面必须加 VITE_ dev环境 test环境 prod环境 在项目根目录下创建 03-1:配置多环境变量之dev环境 .env.development 03-2:配置多环境变量之test环境 .env.test 03-3:配置多环境变量之prod环境 .env.production 03-4 修改

    2024年02月02日
    浏览(83)
  • vue3+vite中使用环境变量 .env 的一些配置情况说明

    在项目文件中新建文件.env .env.pro 两个文件其中.env 是默认设置 .env.pro 为正式环境设置 1、设置.env中的内容信息 注意vue3+vite 必须使用VITE开头的配置信息 否则无法获取 如果不想使用VITE开头自己修改就在vite.config.ts文件中添加envPrefix:“APP_” 2、在 vite 中使用环境变量,可以用

    2024年02月04日
    浏览(65)
  • 【Vue3实践】(六)Vue3使用vite处理环境变量、打包部署、nginx配置

    由于在日常开发中会有一部分前端的开发任务,会涉及到Vue的项目的搭建、迭代、构建发布等操作,所以想系统的学习一下Vue相关的知识点,本专题会依照Vue的搭建、开发基础实践、进阶用法、打包部署的顺序进行记录。 历史文章链接如下: 《Vue3搭建、路由配置与基本语法

    2023年04月08日
    浏览(141)
  • Vite+Vue3项目如何获取环境配置,并解决前端跨域问题

    根目录新建.env.development和.env.production文件 package.json配置启动参数 vite命令启动项目时,指定mode参数,加载vite.config.ts文件。 配置代理 在vite.config.ts中配置代理 配置vite-plugin-html 通过vite-plugin-html组件,可以将配置文件中的数据,绑定到index.html中,可以实现不同环境的页面ti

    2024年02月19日
    浏览(66)
  • vite搭建vue3项目本地环境自定义域名及端口配置

    本blog讲述的是vite直接创建的vue3的项目的本地环境自定义域名配置。 windows 首先配置本地的一个域名代理指向。 在windows环境下host文件的位置是 C:WindowsSystem32driversetc 我们需要打开目录下的hosts文件然后在 其中找到127.0.0.1然后在后面追加一行 Mac 在mac系统中我们需要打开终

    2024年02月06日
    浏览(129)
  • vue 环境配置并配置打包命令(多个代理地址)。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1.在src同级目录下新建以下三个文件: 注意:文件名是固定的不要自定义。 属性名必须以 VUE_APP_ 开头,如:VUE_APP_XXX vue 会根据启动命令自动加载相对应的环境配置文件。vue是根据文件名进行加载的,所

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包