vue3使用socket.io的踩坑实战记录

 更新时间:2023年03月18日 09:09:03   作者:WYHID  
Socket.io将Websocket和轮询机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码,下面这篇文章主要给大家介绍了关于vue3使用socket.io踩坑的相关资料,需要的朋友可以参考下

我们的项目出现聊天室、客服等需求,需要与服务器建立双全工通信,这里使用socket.io框架,

具体使用步骤可以查询官方文档,非常简单,方便。这里主要解决使用时遇到的坑。

我是用vue3搭建的项目,

问题一:vue-socket.io与socket.io的区别

一、socket.io

1.在项目的入口文件index.js用socket链接

<script src="https://cdn.socket.io/4.4.1/socket.io.min.js" 
	integrity="sha384-fKnu0iswBIqkjxrhQCTZ7qlLHOFEgNkRmK2vaO/LbTZSXdJfAu6ewRBdwHPhBo/H" 
	crossorigin="anonymous">
</script>

 2.在需要的页面使用window.io.connect('---') ---表示服务器地址

var socket = window.io.connect('http://localhost:3000')

我用node.js在本地3000端口上写了服务器

服务端代码

var {createServer} = require('http')
var {Server} = require('socket.io')
var httpServer = createServer()
var io = new Server(httpServer,{
//配置cors,解决同源策略问题
  cors: {
    origin: "*",
	methods:['GET','POST']
  }
});
//
io.on('connection', (socket) => {
	console.log('a user connected');
    //接收客户端发送来的消息
	socket.on('sendinfor', (msg) => {
		console.log('message: ' + msg);
		io.emit('some event',msg)
	  });
});
 
httpServer.listen(3000, () => {
  console.log('listening on *:3000');
});

二、vue-socket.io

注: vue-socket.io  vue项目里使用这个插件是为了贴合vue的格式,方便书写,但有问题。

可以直接使用socket.io-client这个插件完成客户端的代码。

1.需要下载vue-socket.io和socket.io-client包

npm i vue-socket.io -s
npm i socket.io-client -s

2.引入两个包,并创建连接 new vueSocketIo({connection:SocketIO('服务器地址')})

<script>
	// import vueSocketIo from 'vue-socket.io'
	// import SocketIO from 'socket.io-client'
	export default {
		name:'Socketserver',
		setup(){
			// const socketOptions = {
			// 	autoConnect: true,       // 自动连接     
			// }
			
			// //建立websocket连接
			// var socket = new vueSocketIo({
			// 	debug:true,
			// 	connection:SocketIO('http://localhost:5001',socketOptions)
			// })
			// //接受服务端发来的消息
			// socket.io.on('backinfor',(data) =>{
			// 	console.log(data)
			// })
			
			function sendinf(){
				if(infor.value){
					//向服务器发送消息
					socket.io.emit('sendinfor',socketid,infor.value)
				}
			}
			
			
			return {
			}
		}
	}
</script>

用socket来接收这个实例,其他api都在socket.io上,如socket.io.emit(EVENTNAME,arg)发送消息。

注:不知道为什么,我这二用socket.io.on()接收不到消息。知道的同学评论区提醒一下。

第一种方法没有问题。

问题二:受同源策略的影响,怎样跨域

方式一、vue3前端代理服务器(用这种方法还是连接不上),建议在服务端配置cors

在vue.config.js文件里写如下代码,没有该文件的话,则自己在根目录下创建同名文件

module.exports = {
  //开启代理服务器的方式二
  devServer: {
  	proxy: {
		'/wsq': {
		//需要访问的服务器地址
			target: 'http://localhost:3000',
		//后面空格替换前面,确保服务器有这个地址
			pathRewrite: {'^/wsq':''},
		//false时,以原域名访问服务器;true时,原域名变成服务器域名访问
		changeOrigin:true
		},
  	}
  }
}

创建连接时使用:http:localhost:8080/wsq

var socket = window.io.connect('http://localhost:8080/wsq')

配置代理服务器具体逻辑,取vue官网查看

方式二、服务端

var io = new Server(httpServer,{
//配置cors,解决同源策略问题
  cors: {
    origin: "*",
	methods:['GET','POST']
  }
});

注:socket.io必须要用http来监听端口

总结

到此这篇关于vue3使用socket.io踩坑的文章就介绍到这了,更多相关vue3使用socket.io内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中slot插槽的参数汇总及使用方案

    vue中slot插槽的参数汇总及使用方案

    Vue.js中的插槽(slot)是一种机制,允许你在组件的模板中预留一些位置,以便父组件可以将任意内容插入到这些位置,这使得组件更加灵活和可复用,本文主要介绍了vue中slot插槽的参数汇总及使用方案,需要的朋友可以参考下
    2024-03-03
  • vue单页面应用部署配置详解

    vue单页面应用部署配置详解

    本文主要介绍了vue单页面应用部署配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • defineProps宏函数不需要从vue中import导入的原因解析

    defineProps宏函数不需要从vue中import导入的原因解析

    这篇文章主要介绍了defineProps宏函数不需要从vue中import导入的原因解析,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 在Vue2中注册全局组件的两种方法详解

    在Vue2中注册全局组件的两种方法详解

    这篇文章主要介绍了在Vue2中注册全局组件的两种方法,非常的细致,需要的朋友可以参考下
    2022-07-07
  • 解决Vue+Electron下Vuex的Dispatch没有效果问题

    解决Vue+Electron下Vuex的Dispatch没有效果问题

    这篇文章主要介绍了Vue+Electron下Vuex的Dispatch没有效果的解决方案 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 利用Vue.js实现求职在线之职位查询功能

    利用Vue.js实现求职在线之职位查询功能

    Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。下面这篇文章主要给大家介绍了关于利用Vue.js实现求职在线之职位查询功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Vue的底层原理你了解多少

    Vue的底层原理你了解多少

    这篇文章主要为大家详细介绍了Vue的底层原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • vue制作点击切换图片效果的详细思路与步骤

    vue制作点击切换图片效果的详细思路与步骤

    这篇文章主要给大家介绍了关于vue制作点击切换图片效果的详细思路与步骤,图片切换是一个很经典的Vue入门学习案例,在你学习完一些基本的v-指令后,你可以尝试去写一个简单的demo去巩固和熟悉这些指令的使用方法,需要的朋友可以参考下
    2023-11-11
  • 图文详解vue中proto文件的函数调用

    图文详解vue中proto文件的函数调用

    这篇文章主要给大家介绍了vue中proto文件函数调用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • 详解vue3的沙箱机制

    详解vue3的沙箱机制

    这篇文章主要介绍了vue3的沙箱机制的相关资料,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-04-04

最新评论