websocket的socket.io使用前端详解 后端为java

多的不说了,这次又是做一个实时聊天功能,第一印象就是websocket,在网上找了一堆帖子,发现了socket.io这个宝藏,因为我们后端使用的是Java。所以常规的socket.io肯定是用不了的,这个时候就发现netty-socketio这篇文章。前端使用socket.io是可以直接连接到的。现在就开始使用吧

第一步当然是下载, 因为vue有自带的vue-socket.io,所以我们直接npm install 就行

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

然后在main.js进行声明

//socket
import VueSocketIO from 'vue-socket.io';
import socketio from 'socket.io-client';
Vue.use(new VueSocketIO({
  debug: true, //  debug检测  开启后会有提示
  connection: socketio( 'xxx', {
    path: '',
    transports: ['websocket', 'polling'],
  }),
  options: {
    autoConnect: false // 关闭自动连接,一般是在用户登录过后才进行手动连接
  }
})); //xxx填后台给的socket地址,端口号根据实际后台端口写

大家也可以去socket.io官方文档进行查看

然后在组件内的使用就是这样的

  export default {
    data() {
      return {
        timer: 0
      };
    },
    mounted() {
      this.$socket.open()
      this.$socket.connect()
    },
    sockets: { // 这儿是直接监听有没有触发socket请求  可以在这儿进行声明
      //连接成功
      connect(data) {
        console.log('连接成功', data)
      },
      //断开重连 在此位置会进行多次的重新连接 直到连接成功
      reconnect(data) {
        this.$socket.emit('connect', 1)
      },
      // 获取返回的列表  这个方法名是后台自定义的
      GetChatListVoListRes(res) {
        this.messList = res.list
      },
    },
    // 页面销毁时记得关闭连接
    beforeDestroy() {
      // 关闭 Socket
      this.$socket.close();
    },
    methods: {
      getMessList() {
        // 向后台发送请求 后台进行接收参数  这些名称都是由后端声明  前端进行调用
        this.$socket.emit('GetChatListVoList', this.query)
        // 这儿就是进行取值操作了  获取后台返回的值 是一直进行监听的
        this.sockets.subscribe('GetChatListVoListRes', (res) => {
          this.messList = res.list
          console.log(res.list)
        })
      },
    }
  }

这个时候,前端的工作就结束了, 如果还没有打印的话,就是后端的锅了。正常情况下,到这儿就该结束了,但是我发现一个问题,那就是我是用uniapp写的小程序。而这一堆代码,只能在h5页面,也就是浏览器才会调用。上面写了半天,结果压根没有调用,当场崩溃  ,还好这个时候找了找解决方案,发现uniapp也有socket.io。这个时候就让我们来看一下怎么实现的

// 第一步,建立一个文件夹,存放文件 weapp.socket.io.js
资源地址:https://blog-static.cnblogs.com/files/sanyekui/weapp.socket.io.js

// 第二步,在main.js文件中建立socket.js文件
const uniio = require("./weapp.socket.io.js"); // 引入 socket.io
// 在全局声明 socket
Vue.prototype.$socket = uniio.connect("url地址", {
  transports: ['websocket'],
  path: '',
});

这一段参考了这一篇文章,感兴趣的可以去看一看    链接地址

当然  我们之前写的代码可不能浪费了   还是可以接着使用的只是需要改一下

// 我们传值的方式没有改变   还是之前的方式
this.$socket.emit('GetChatListVoList', this.query)
// 需要改变的是监听取值的方式  改成这个样子
this.$socket.on('GetChatListVoListRes', (res) => {
   this.messList = res.list
})

这样小程序和app也能正常调用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值