vuejs - 共享组件之间的websocket连接

ner*_*ric 8 websocket vue.js vue-router vuejs2

开始使用小型vuejs应用程序.如何在根组件中打开websocket连接并在其他组件中重用相同的连接?

我希望组件能够通过相同的连接发送和接收.这些组件将被绑定到路由,以便根组件和为路由呈现的组件之间没有直接的父子关系.

App.vue:

<template>
  <div id="app">
    <h1>My app</h1>
    <router-link to="/">P&L</router-link>
    <router-link to="/other-page">other page</router-link>
    <router-view></router-view>
  </div>
</template>

<script>
export default {

  name: 'app',
  data () {
    return {
      ws: null
    }
  },

  created () {
    this.ws = new WebSocket('ws://localhost:8123/ws')
  },
  methods: {
    }
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)

现在我想重新使用ws,other-page以便每次改变路线时不重新连接.

vov*_*sko 7

创建新的 js 文件(假设为“/services/ws.js”)。创建 websocket 实例。

const WS = new WebSocket('ws://localhost:8080');
export default WS;
Run Code Online (Sandbox Code Playgroud)

然后在你的 Vue 组件中导入它。

<script>
 import WS from '../services/ws';

 export default {
   // here WS is your websocket instance
 }
 </script>
Run Code Online (Sandbox Code Playgroud)

这是在组件之间共享数据的最简单方法(在这里您只需共享在另一个模块中创建的 WS 实例)。您还可以在其上安装 MVC 风格,将所有逻辑保留在控制器(其他模块)中,而不是 Vue 方法中。

  • 这取决于您的授权方式。例如,如果您使用 WS 授权 - 您可以在创建实例后立即在“/ws.js”中实现它。或者仅在获得身份验证令牌并导出一些“getWSClient”而不是客户端本身后创建一个示例。 (2认同)