node及socket.io实现简易websocket双向通信

时间:2021-06-20 05:45:21

技术栈: vue2.0 + node + websocket( socket.io )

1. 安装依赖

初始化vue项目后输入下方指令安装依赖包

// 推荐cnpm安装
npm i vue-socket.io -S  // for 客户端
npm i socket.io -S  // for 服务端node

2. 新建服务端目录如下图  server / app.js 

 node及socket.io实现简易websocket双向通信

//  app.js
var app = require('http').createServer();
var io = require('socket.io')(app);
var PORT = 8081;

app.listen(PORT);
/*
    *新手必读
    *function中的socket为每个客户端单独连接的socket实例,只通知当前连接用户
    *io.sockets 通知所有连接用户
    *socket.broadcast 给除了自己以外的客户端广播消息
*/
io.on('connection', function (socket) {
    for(let i=0; i<100; i++){
        setTimeout(()=>{
            io.sockets.emit('progress',i);
            console.log("当前进度为",i+1);
        },300*i)
    }
})

console.log('app listen at:'+PORT);

一般而言,运行node程序只需要在文件当前目录下命令行输入 node filename 即可,但是,既然是和vue脚手架一起构建,就充分利用起来。

打开package.json , 在 scripts 中 添加一行

"server": "node server/app.js",

现在,直接在vue项目的根目录运行 npm run server 命令就可以开启服务了。

3.  为了简便,直接修改vue初始化项目中的components下的HelloWorld.vue文件

// HelloWorld.vue文件

<template>
  <div class="process" >
    <progress max="100" :value="progressValue"></progress>
  </div>
</template>
<script>
  import Vue from 'vue'
  import VueSocketio from 'vue-socket.io'
  Vue.use(VueSocketio, 'ws://localhost:8081') // 注意和本地服务器地址及端口一致

  export default {
    data(){
      return{
        progressValue: 0, // 进度值
      }
    },
    //(socket.on)绑定事件放在sockets中
    sockets:{ 
      // 创建连接
      connect(){
          console.log('连接成功啦')
      },
      // 监听自定义progress事件,需与服务端emit事件名一致
      progress(res){
        this.progressValue = res;
        console.log('2222',res)
      }
    }
  }
</script>
<style scoped>
  .process { text-align:center; }
</style>

最后,运行代码

npm run server   // 开启服务

切记,不要关闭窗口,然后再新开命令行,注意,是新开一个,运行

npm run dev

就能看到一个进度条的效果了( 客户端(浏览器)发起请求,然后服务端不停传输数据,客户端监听对应事件和数据并重新渲染页面 )。

这只是很简单的一个应用,在此基础上很容易就可以改成比较多人在线聊天室的功能。

node及socket.io实现简易websocket双向通信