egg-socket.io安装和通讯

安装

npm i egg-socket.io --save

config/plugin.js

io: {
  enable: true,
  package: 'egg-socket.io',
},

config/config.default.js

config.io = {
  init: {
    wsEngine: 'ws',
  },
  namespace: {
    '/': {
      connectionMiddleware: [],
      packetMiddleware: [],
    }
  },
  redis: {
    host: '127.0.0.1',
    port: 6379,
    db: 0,
  },
};

egg部署: package.json start和dev里面添加 --sticky

 "scripts": {
    "start": "egg-scripts start --sticky --daemon --title=egg-server-yunwei",
    "stop": "egg-scripts stop --title=egg-server-yunwei",
    "dev": "egg-bin dev --sticky",
    "debug": "egg-bin debug",
    "test": "npm run lint -- --fix && npm run test-local",
    "test-local": "egg-bin test",
    "cov": "egg-bin cov",
    "lint": "eslint .",
    "ci": "npm run lint && npm run cov",
    "autod": "autod"
  },

uniapp导入uni-socket.io.js文件

socketUrl:"http://192.168.43.31:7001",

引入io

//引入io通讯库
import io from '../common/uni-socket.io.js';

配置连接

import Vue from 'vue'
import Vuex from 'vuex'

//引入io通讯库
import io from '@/assets/common/uni-socket.io.js';
Vue.use(Vuex)

export default new Vuex.Store({
  state: { },
  actions: {
	  //连接socket
	          connectSocket({state,dispatch}){
	              const S= io('http://127.0.0.1:7001',{
	                  query:{},
	                  transports:['websocket'],
	                  timeout:5000  //超时
	              })
	              //监听连接
	              S.on('connect',()=>{
	                  console.log('已连接')
	                  //测试推送一条消息到后端
	                  S.emit('test','123456')
	                  //唯一的id
	                  //console.log(S.id)
	                  //前端接收 后端传过来的数据
	                  S.on(S.id,(e)=>{
	                      console.log(e)
	                  })
	              })
	              //监听失败
	              S.on('error',()=>{
	                  console.log('连接失败')
	              })
	              //监听断开
	              S.on('disconnect',()=>{
	                  console.log('已断开')
	              })
	          },



  }
})

后台配置路由
app/io/controller/nsp.js 测试

'use strict';

const Controller = require('egg').Controller;

class NspController extends Controller {
  async test() {
    const {ctx,app}=this
    //接收前端传递过来的信息 参数
    //console.log(ctx.args)
    let message=ctx.args[0]
    //当前的socket连接
    const socket=ctx.socket
    const id=socket.id
    socket.emit(id,'哈哈哈')
  }
}

module.exports = NspController;

路由 router.js

'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  //解构io
  const { router, controller,io } = app;
  //这里的'test'要和前端的'test'一致
  io.of('/').route('test',io.controller.nsp.test);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: WebsocketSocket.io 都是用于在客户端和服务端之间建立双向通信的协议。 Websocket 是一种协议,它提供了一种在单个 TCP 连接上进行全双工通信的方法。这意味着可以在两端之间同时传输数据。它使用了浏览器中的 JavaScript 对象来创建 WebSocket 连接。 Socket.io 是一个基于 Websocket 的实时库,它封装了 Websocket 的细节,并提供了自动的跨浏览器兼容性。它还支持自动重连、自动检测网络状况、以及其他一些实用的功能。 总的来说,Websocket 是一种通信协议,而 Socket.io 是一个库,它在使用 Websocket 的基础上提供了更多的功能。 ### 回答2: WebSocketSocket.io都是用于实现实时通信的协议,但它们在功能和实现上有一些区别。 WebSocket是一种基于TCP的通信协议,它提供了双向通信的能力。它可以在客户端和服务器之间建立持久的连接,并通过该连接传输数据。WebSocket使用简单的握手过程建立连接,然后可以发送和接收数据,而无需经过HTTP的请求-响应循环。由于它是一种底层协议,WebSocket可以直接与服务器进行通信,适用于实现实时的双向通信。 Socket.io是一个基于WebSocket的库,它提供了一些额外的功能和特性。与WebSocket相比,Socket.io更加灵活,能够适应不同的环境和网络条件。Socket.io可以自动检测和选择最佳的传输协议,包括WebSocket、AJAX和长轮询等。这使得Socket.io可以在不同的浏览器和设备上工作,并且可以处理浏览器兼容性问题。此外,Socket.io还提供了一些高级功能,如房间和命名空间的概念,用于组织和管理连接。 总结来说,WebSocket是一种底层协议,提供了双向通信的能力,而Socket.io是一个基于WebSocket的库,提供了更多的功能和便利性。如果只需要简单的双向通信,可以使用WebSocket;如果需要更多的功能和灵活性,可以选择Socket.io来实现实时通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光浅止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值