【Vue 实践】增加简历市场及 WebSocket 通知-02

栏目: 后端 · 发布时间: 5年前

内容简介:最近终于收到一个面试通知:面试官:巴拉巴巴……我:巴拉巴拉……

最近终于收到一个面试通知:

面试官:巴拉巴巴……

我:巴拉巴拉……

面试官:你用过 WebSocket 吗?

我:Emma……以前了解过,但是没有使用过,不过我近期准备给自己做的简历增加一个市场,当有用户新增简历推送时,在浏览简历市场的用户就可以收到提示。

实现效果

预览

【Vue 实践】增加简历市场及 WebSocket 通知-02

在线

  1. 源码地址
  2. 简历市场
  3. 个人简历

实现步骤

以前记得在菜鸟教程 上看过 WebSocket 示范,继续回顾一下,可以发现实现一个简单的 WebSocket 很容易。

1. 后端

首先需要一个 WebSocket 的后端服务:

const WebSocket = require("ws");

const PORT = process.env.PORT || 3175;
const server = new WebSocket.Server({ port: PORT });

let socketSet = [];

server.on("connection", (websocket, req, res) => {
  const userId = req.url.split("/");

  let isOnline = false;
  socketSet.forEach(ws => {
    if (ws.user == userId[1]) isOnline = true;
  });
  if (!isOnline) {
    socketSet.push({
      websocket: websocket,
      user: userId[1]
    });
  }

  websocket.on("message", function incoming(message) {
    const { updateMarket, author } = JSON.parse(message);
    if (updateMarket) {
      socketSet.forEach(ws => {
        if (ws.websocket.readyState == 1) {
          ws.websocket.send(
            JSON.stringify({
              msg: '简历市场已更新',
              updateMarket,
              author
            })
          );
        }
      });
    }
  });
});
复制代码

可以将连接进来的用户 push 到数组中,便于用户管理,有了数组自然就可以很容易找到对应的用户实现聊天了,不过此处仅需要实现通知即可。

当从客户端收到的消息中 updateMarket 时即向在先的用户进行广播,通知有新的简历。

2. 前端

有很多页面需要实现 WebSocket,所以要封装一个服务:

export default {
  // 保证整个项目只有一个socket实例
  ws: null,
  init(config, onMessage, onError) {
    if (!this.ws) {
      // 实例化
      this.ws = new WebSocket(`ws://47.112.26.219:3175/${config.timestamp}`);
    }

    this.ws.onmessage = event => {
      let message = JSON.parse(event.data);
      onMessage && onMessage(message);
    };

    this.ws.onerror = error => {
      onError && onError(error);
    };

    this.ws.onclose = () => {
      this.ws = null;
    };
  },
  send(msg) {
    this.ws.send(JSON.stringify(msg));
  }
};
复制代码

3. 推送消息

首先需要完成简历发起的通知,也就是需要在分享简历时向 WebSocket 服务推送消息:

<script>
export default {
  mounted() {
    const timestamp = new Date().getTime();
    WS.init({ timestamp });
  },
  methods: {
    displayResume() {
      WS.send(msg);
    }
  }
}
</script>
复制代码

4. 接收消息

进入 market 时会连入 WebSocket 服务,同时监听是否有新消息的通知:

<script>
export default {
  mounted() {
    WS.init(
      { timestamp },
      message => {
        this.newResume.push({
          msg: message.msg
        });
      },
      error => {
        // eslint-disable-next-line no-console
        console.log(error);
      }
    );
  }
}
</script>
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

.NET设计规范

.NET设计规范

克瓦林纳 / 葛子昴 / 人民邮电出版社 / 2006-7 / 49.00元

本书为框架设计师和广大开发人员设计高质量的软件提供了权威的指南。书中介绍了在设计框架时的最佳实践,提供了自顶向下的规范,其中所描述的规范普遍适用于规模不同、可重用程度不同的框架和软件。这些规范历经.net框架三个版本的长期开发,凝聚了数千名开发人员的经验和智慧。微软的各开发组正在使用这些规范开发下一代影响世界的软件产品。. 本书适用于框架设计师以及相关的专业技术人员,也适用于高等院校相关专业......一起来看看 《.NET设计规范》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具