当前位置:   article > 正文

vue2 封装 webSocket 开箱即用(或 uni.connectSocket)_原生websocket 封装 vue

原生websocket 封装 vue

第一步:

   下载 webSocket 

npm install vue-native-websocket --save

第二步:

  需要在 main.js 中 引入

  1. import websocket from 'vue-native-websocket';
  2. Vue.use(websocket, '', {
  3. connectManually: true, // 手动连接
  4. format: 'json', // json格式
  5. reconnection: true, // 是否自动重连
  6. reconnectionAttempts: 5, // 自动重连次数
  7. reconnectionDelay: 2000, // 重连间隔时间
  8. });

 第三步:

    封装相关的连接和断开

 

 相关代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  1. const socketService = {
  2. socket: null,
  3. init(username) {
  4. if (typeof WebSocket === "undefined") {
  5. alert("您的浏览器不支持socket");
  6. } else {
  7. // ws://10.244.11.117:8089/dashboard/websocket/
  8. let path = "你的ws WebSocket 地址" + username; // 请求路径
  9. this.socket = new WebSocket(path);
  10. this.socket.onopen = this.open.bind(this);
  11. this.socket.onerror = this.error.bind(this);
  12. this.socket.onmessage = this.getMessage.bind(this);
  13. }
  14. },
  15. open() {
  16. console.log("socket连接成功");
  17. },
  18. error() {
  19. console.log("连接错误");
  20. },
  21. //这里我判断了 是不是 JSON (要和后端定一下结构类型) (二选一)
  22. getMessage() {
  23. return new Promise((resolve, reject) => {
  24. this.socket.onmessage = (msg) => {
  25. console.log(msg.data);
  26. // 利用promise 返回出去结果
  27. if (msg.data != '连接成功' && JSON.parse(msg.data)) {
  28. const data = JSON.parse(msg.data);
  29. resolve(data); // 将数据传递给调用者
  30. }
  31. // this.scrollInstance.refresh(); // 手动刷新滚动效果
  32. };
  33. });
  34. // this.scrollInstance.refresh(); // 手动刷新滚动效果
  35. },
  36. // 也可以这样写 start (二选一)
  37. getMessage() {
  38. if (this.messageCallback) {
  39. this.socket.onmessage = (msg) => {
  40. this.messageCallback(msg.data); // 调用回调函数,并传递消息数据
  41. };
  42. }
  43. },
  44. // 也可以这样写 end
  45. send(params) {
  46. if (this.socket) {
  47. this.socket.send(params);
  48. }
  49. },
  50. close() {
  51. console.log("socket已经关闭");
  52. }
  53. };
  54. //最后导出
  55. export default socketService;

 第四步: 

引入使用

  1. //路径是自己的啊
  2. import socketService from "../sokect/index";

  1. mounted() {
  2. // 调用
  3. this.startSocket();
  4. },
  5. methods: {
  6. // 针对性用啊 和上方一一对应的
  7. async startSocket() {
  8. // 这里是 username
  9. socketService.init("warning-all");
  10. try {
  11. const msg = await socketService.getMessage();
  12. //打印出来 服务器给我的信息
  13. console.error(JSON.parse(msg.data) );
  14. } catch (error) {
  15. console.error("Error receiving message:", error);
  16. }
  17. },
  18. }
  19. // 针对性用啊 和上方一一对应的 感觉都差不多
  20. async startSocket() {
  21. socketService.init('warning-all');
  22. try {
  23. const msg = await new Promise((resolve) => {
  24. socketService.messageCallback = resolve; // 设置回调函数,以便获取消息数据
  25. });
  26. console.log('推送消息:', msg);
  27. // 在这里处理你的推送消息
  28. } catch (error) {
  29. console.error('Error receiving message:', error);
  30. }
  31. }

到这步接收信息已经OK了(记得和后端配合)


 

 使用 uni.connectSocket 进行连接

  1. data() {
  2. return {
  3. title: [],
  4. reconnectInterval: 5000
  5. };
  6. },
  7. startSocket() {
  8. this.socket = uni.connectSocket({
  9. url: 'ws://yapi.care-bay.com/websocket/12584',
  10. success: () => {
  11. console.log('WebSocket连接已打开');
  12. },
  13. fail: (error) => {
  14. console.log('WebSocket连接出错', error);
  15. setTimeout(() => {
  16. console.log('尝试重新连接');
  17. this.startSocket();
  18. }, this.reconnectInterval);
  19. }
  20. });
  21. this.socket.onMessage((event) => {
  22. this.title.push(event.data);
  23. console.log('Received message:', event.data);
  24. // 在这里处理收到的消息
  25. });
  26. this.socket.onClose(() => {
  27. console.log('WebSocket连接已关闭');
  28. setTimeout(() => {
  29. console.log('尝试重新连接');
  30. this.startSocket();
  31. }, this.reconnectInterval);
  32. });
  33. }

 发送消息 vue-native-websocket

 第一步:按照我上面的步骤走完之后,发送信息的结果(也就是参数-和后端商量好需要哪些)

 第二步: 上代码 

  1. import socketService from '../../../sokect/index'; //(自己的路径啊)
  2. huoqu() {
  3. if (!this.textarea) {
  4. this.$message({
  5. message: '请填写回复的内容,谢谢',
  6. type: 'warning'
  7. });
  8. return;
  9. }
  10. // 构建包含所需数据的 JSON 对象 --后端商量好的参数 需要发送的 我这边根据自己的需要
  11. //定是 JSON形式的
  12. const messageData = {
  13. nurseId: this.nurseIds,
  14. conversationId: this.conversationIds
  15. };
  16. if (this.stauts) {
  17. messageData['keyword'] = this.textarea;
  18. } else {
  19. messageData['linkUrl'] = this.textarea;
  20. }
  21. // 将 JSON 对象转换为字符串
  22. const messageString = JSON.stringify(messageData);
  23. console.log('messageData', messageString);
  24. // 发送消息---这边是发送信息的主要动作----OK
  25. socketService.send(messageString);
  26. // 发送成功之后 删除
  27. this.textarea = '';
  28. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/576686
推荐阅读
相关标签
  

闽ICP备14008679号