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

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

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

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

面试官:巴拉巴巴……

我:巴拉巴拉……

面试官:你用过 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>
复制代码

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

查看所有标签

猜你喜欢:

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

网络心理学

网络心理学

玛丽•艾肯 (Mary Aiken) / 中信出版社 / 2018-8-1 / CNY 58.00

《五十度灰》如何利用恋物心理,成为全球仅次于《圣经》的畅销读物? 为什么相对于亲朋好友,你更愿意向网络陌生人敞开心扉? 上网时总感觉时间飞逝,原来是网络的时间扭曲效应? 网络游戏中埋伏了哪些“上瘾”机关,暗中操控着你的行为? 为什么科技越发达,我们就越怕死? ...... 网络空间是一个巨大的兔子洞,里面集合了新奇、刺激、喜悦、痛苦、不安等各种元素。在日复一日的......一起来看看 《网络心理学》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具