在vue中使用socket.io

前言:前端与后端交互时,一般都使用ajax,但ajax无法实时获取更新的数据,采用轮询方式开销会非常大,且后端也无法主动推送数据给前端。vue提供了socket.io来解决这个问题,一旦数据进行更新,服务端可主动将数据推送至客户端,常用于消息类推送的场景中。

socket.io的github地址:https://github.com/MetinSeylan/Vue-Socket.io


一、关于socket通信的简单说明

Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信(来源百科)。它是一种全双工(服务端与客户端可同时收发消息)通信,当有数据更新时服务端可以主动的将消息推送到客户端。

Socket通信的运行流程如下:

1、服务端启动Socket监听端口,监听是否有客户端连接进来,即Watch Socket;

2、客户端通过http协议发送请求报文,服务端响应请求后会将协议升级为WebSocket,并创建一个新的Socket对象,客户端Socket随即与服务端Socket进行连接和通信,且客户端不再与Watch Socket通信;

3、Watch Socket继续监听是否有其它客户端连接。

二、安装依赖

npm install vue-socket.io --save

npm install socket.io-client --save

三、在全局中引入组件

在main.js中引入

import SocketIO from "socket.io-client"

import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO({

      debug: true,

      connection: SocketIO ('ws://socket地址:端口号'),

      vuex: {       // 不需要用到vuex这个可以不加

            store,

            actionPrefix: 'SOCKET_',

            mutationPrefix: 'SOCKET_'

      }

}))

四、在组件中使用

注意:下面的 connect 方法和 message 方法是我对接的后台写的监听事件名称,实际使用时每个后台定义的名称都不会一样,这个要事先和你的后台确认好。

<script>

    export default {

        data() {

            id: '',

        },

        mounted() {

            this.$socket.emit('login', loginId);       //触发socket连接

        },

        sockets: {

            connect() {

                this.id = this.$socket.id;

                this.$socket.emit('login', loginId);      //监听connect事件

            };

            message(data) {                                 //监听message事件,方法是后台定义和提供的

                console.log(data);

            }

        },

        methods: {

            clickButton: function(val){                       //添加按钮事件向服务端发送数据

                this.$socket.emit('emit_method', val);

        }

    }

</script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容