nodejs-websocket实现前后端通讯

482 阅读1分钟

node服务

引入需要的库

npm install nodejs-websocket

创建需要的server.js文件

const ws = require("nodejs-websocket");
const server = ws.createServer(function (socket) {
  // 读取字符串消息,事件名称为:text
  var count = 5;
  socket.on("text", function (str) {
    // 在控制台输出前端传来的消息
    console.log(str);
    //向前端广播消息
    server.connections.forEach((conn) => { 						
	conn.sendText(str);
    })
  });
  socket.on("error", () => {
    console.log("err");
  });
});

server.listen(18002, () => {
  console.log("connected...");
});

在app.js中引入server.js

require("./src/server/server.js");

注意:如果用的宝塔,需要宝塔端口放行,同时阿里云的安全组端口也要放开

阿里云

image.png

宝塔

image.png

前端vue

export default {
  // import引入的组件需要注入到对象中才能使用
  components: {
  },
  data() {
    // 这里存放数据
    return {
      websocket: null
    }
  },
  // 监听属性 类似于data概念
  computed: {},
  // 监控data中的数据变化
  watch: {},
  // 生命周期 - 创建完成(可以访问当前this实例)
  created() {},
  // 生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
    this.connectWebsocket()
  },
  beforeCreate() {}, // 生命周期 - 创建之前
  beforeMount() {}, // 生命周期 - 挂载之前
  beforeUpdate() {}, // 生命周期 - 更新之前
  updated() {}, // 生命周期 - 更新之后
  beforeDestroy() {}, // 生命周期 - 销毁之前
  destroyed() {}, // 生命周期 - 销毁完成
  activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
  // 方法集合
  methods: {
    connectWebsocket() {
      const that = this
      if (typeof WebSocket === 'undefined') {
        console.log('您的浏览器不支持WebSocket')
        return
      } else {
        const url = 'ws://XX.XX.XX.XX:XXX'
        // 打开一个websocket
        this.websocket = new WebSocket(url)
        // 建立连接
        this.websocket.onopen = () => {
          // 发送数据
          setInterval(() => {
            that.websocket.send('发送数据')
          }, 1000)
        }
        // 客户端接收服务端返回的数据
        this.websocket.onmessage = (evt) => {
          console.log('websocket返回的数据:', evt)
        }
        // 发生错误时
        this.websocket.onerror = (evt) => {
          console.log('websocket错误:', evt)
        }
        // 关闭连接
        this.websocket.onclose = (evt) => {
          console.log('websocket关闭:', evt)
        }
      }
    }
  }
}
</script>