socket.io 命令空间 长连接 进度条

2018-08-06  本文已影响0人  jebirth

在抓取数据时,过程是非常缓慢的,需要使用进度条来不让用户发疯。


前堤

  1. 在抓取数据过程会非常缓慢,需要给页面加个进度条;
  2. 如果同一个时间只有抓取一个公司的数据,那太浪费Node高并发性了。

解决方案:

  1. 使用socket.io来进行长连接。
  2. 在遮掩层有叉关闭按键,用户可以抓取其他公司的数据。

本文内容


1.项目需要的库与技术


2.提交方案


3.Socket长连接设计

//index.js
import express from 'express';
const app = express();
export const server = require('http').createServer(app);
export const io = require('socket.io')(server);

//进度条  js
import { io } from '../index';
const adminNamespace = io.of(companyName); //打开compnayName命令空间
//barTotalTime为总量, currentBar为当时进度
adminNamespace.emit('news', JSON.stringify({ total: barTotalTime, current: currentBar }));
//抓取完时,关闭这个长连接
adminNamespace.on('connection', (socket) => {
      setTimeout(() => socket.disconnect(true), 1000);
    });
import io from 'socket.io-client';
//根据用户输入来创建命令空间
let socket = io(`http://localhost:8787/${companyName}`);
//获取到数据,进行操作
await this.state.socketIO.on('news', (data) => { ...})
//在客户端关闭长连接
this.state.socketIO.close();

4. 运行项目

5.参考网站

6.展望

上一篇 下一篇

猜你喜欢

热点阅读