vue+node+socket io实现多人互动并发布上线全流程

 更新时间:2021年09月26日 11:49:18   作者:牛顿顿的apple  
这篇文章主要介绍了vue+node+socket io实现多人互动并发布上线全流程,本文给大家提到了socket.io相关用法概览及开发流程,需要的朋友可以参考下

一、背景

 1. 前端使用vue + vuex + socket.io-client

npm install socket.io-client --save-dev

2. 后端使用node + express + socketio

1.搭建node开发环境

npm init -y

安装所需依赖

npm install express --save-dev
npm install socket.io-client --save-dev

二、 socket.io相关用法概览

1. 发送事件

socket.emit('事件名', data => {
	// data为要传输的数据,可以为boolean, string, number, object等
})

2. 监听事件

socket.on('发送时的事件名', data => {
	// data发送事件传过来的数据
})

3. 广播事件

// 发送给其他用户 (不对本身发送)
socket.broadcast.emit('事件名',  data => {
	// data为要传输的数据,可以为boolean, string, number, object等
})

三、开发流程

1. 前端新建一个socket.js文件, 用于接收socket相关事件,具体如下

// 引入socket.io-client
import io from 'socket.io-client'

// 创建链接
const socket = io()

// 监听
socket.on('connect', () => {
  console.log('和服务器连接成功!!')
})

> =============中间部分用于监听后端发送的socket事件,例如:=====================
// 进入房间
socket.on('enter_room', (data) => {
  // 必要数据可存storage
  localStorage.setItem('counts', JSON.stringify(data))
  store.commit('setData', JSON.parse(localStorage.getItem('data')))
})

// 处理服务失去连接
socket.on('disconnect', () => {
  console.log('disconnect')
})

2. 后端部分相关代码

const app = require('express')()
const http = require('http').Server(app)
var io = require('socket.io')(http)

let onlineUsers = {}
let users = []
let onlineCounts = 0

io.on('connection', socket => {
	// 用户进入游戏
	socket.on('enter', (data) => 
		// 添加用户信息
		const sid = socket.id
		socket.name = data.name

		// 添加新用户
		if(!onlineUsers.hasOwnProperty(data.name)) {
			onlineUsers[data.name] = sid
			onlineCounts++
		}
		if (!users.length) {
			users.push({
				name: onlineUsers[sid]
			})
		}

		// 当前人数
		let clientsCount = io.sockets.server.engine.clientsCount

		// 发送用户列表给当前用户(对应前端监听enter_room部分代码)
		io.emit('enter_room', {
			role: data.role,
			users,
			onlineCounts
		})
		// 发送新进用户给其他用户 (不对本身发送)
		socket.broadcast.emit('user_enter', data.name)
	})
})

// 后端开启监听端口, 前端通过配置proxyTable处代理到后端服务器,即可进行前后端数据对接
http.listen(port, () => {
	console.log('后端服务器启动成功!!!')
})

四、发布上线

1.前端:

1)安装http-server,然后链接服务器,进入服务器后拉取远程仓库的前端代码(一般在服务器www目录下拉取),如果没有克隆过代码,需要在服务器配置公钥,才能进行下载

公钥配置

ssh-keygen -t rsa -C "你的邮箱"

生成公钥后,进入公钥生成的文件目录,复制到代码托管平台,添加公钥后就可以克隆代码咯

2)打包前端代码,生成dist文件

npm run build

3)进入dist,执行命令,即可启动前端

pm2 start http-server -- -p 指定端口号

4)前端访问,服务器地址+端口号

2.后端:

1)和前端一样(不用安装http-server),进入服务器后拉取远程仓库的前端代码(一般在服务器www目录下拉取),如果没有克隆过代码,需要在服务器配置公钥,才能进行下载
2)执行命令

pm2 start index.js(文件入口,如果你的是app.js为文件入口,就执行app.js) -- -p 指定端口号

注意点:

socket.io在发布线上的时候前端得修改socket.io代理地址端口为后端端口,否则会报404,修改位置如下(这里我的后端端口为3000)

在这里插入图片描述

2. nginx需要修改socket.io的代理转发地址,否则也会报404

在这里插入图片描述 

补充 1.pm2 常用指令

pm2 list // 查看pm2启动列表
pm2 stop 指定端口号 // 停止当前端口下的pm2
pm2 restart 指定端口号 // 重启指定端口的pm2
pm2 delete 指定端口号 // 删除当前窗口下的pm2
pm2 start http-server / index.js -- -p  指定端口号 // 启动对应的前后端

2. nginx在命令行中的相关指令

cd /nginx指定目录
cat nginx.conf // 查看nginx文件内容
vim nginx.conf // 编辑nginix,注意进入后使用 "i"进行编辑模式;"u"撤销上一步编辑;"esc"退出编辑模式;"shift + :"保存并退出

至此,按照上述步骤,就可以进行socket相关的任何类型开发拉,快去试试吧,有问题的小伙伴记得留言哦_

到此这篇关于vue+node+socketio实现多人互动并发布上线全流程的文章就介绍到这了,更多相关vue socketio实现多人互动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何解决element-ui中多个table在tab切换时出现宽度缩小问题

    如何解决element-ui中多个table在tab切换时出现宽度缩小问题

    这篇文章主要介绍了如何解决element-ui中多个table在tab切换时出现宽度缩小问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue使用Pinia轻松实现状态管理

    Vue使用Pinia轻松实现状态管理

    pinia,一个基于Vue3的状态管理库,它可以帮助开发人员管理Vue应用程序的状态,本文主要为大家介绍了Pinia的用法,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • VUE使用vue create命令创建vue2.0项目的全过程

    VUE使用vue create命令创建vue2.0项目的全过程

    vue-cli是创建Vue项目的一个脚手架工具,vue-cli提供了vue create等命令,下面这篇文章主要给大家介绍了关于VUE使用vue create命令创建vue2.0项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • vue处理emoji表情占位符的操作方法

    vue处理emoji表情占位符的操作方法

    在计算字符数时,一般情况下,英文字符、数字和大部分符号都可以被视为占一个字符长度,因为它们是单个字节,然而,对于某些特殊字符,如表情符号和部分非英文字符,会被认为占据了多个字符长度,本文给介绍了vue处理emoji表情占位符的操作方法,需要的朋友可以参考下
    2024-06-06
  • Vue Router去掉url中默认的锚点#

    Vue Router去掉url中默认的锚点#

    vue-router默认hash模式——使用URL的hash来模拟一个完整的URL,于是当URL改变时,页面不会重新加载。这篇文章主要介绍了Vue Router去掉url中默认的锚点#,需要的朋友可以参考下
    2018-08-08
  • vue3 vite pinia配置动态路由、解决刷新页面路由消失的问题

    vue3 vite pinia配置动态路由、解决刷新页面路由消失的问题

    这篇文章主要介绍了vue3 vite pinia配置动态路由、解决刷新页面路由消失的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue使用axios引起的后台session不同操作

    Vue使用axios引起的后台session不同操作

    这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue前端重构computed及watch组件通信等实用技巧整理

    vue前端重构computed及watch组件通信等实用技巧整理

    这篇文章主要为大家介绍了vue前端重构computed及watch组件通信等实用技巧整理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Vue移动端下拉加载更多数据onload实现方法浅析

    Vue移动端下拉加载更多数据onload实现方法浅析

    这篇文章主要介绍了Vue移动端下拉加载更多数据onload实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • vant/vue跨域请求解决方案

    vant/vue跨域请求解决方案

    这篇文章主要介绍了vant/vue跨域请求解决方案,需要的朋友可以参考下
    2022-12-12

最新评论