• hasura graphql subscriptions 使用


    subscriptions graphql 的一项实时数据推送的功能,还是很方便的,自己在直接使用subscriptions-transport-ws npm 包
    的时候运行一直有错误(主要是依赖的apollo版本),还好hasura graphql 默认提供了一个开发模版,还是比较方便的

    模版clone

    git clone https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate.git

    基本代码集成

    • 使用模版(graphql server是自己的)
    const { execute } = require('apollo-link');
    const { WebSocketLink } = require('apollo-link-ws');
    const { SubscriptionClient } = require('subscriptions-transport-ws');
    const ws = require('ws');
    const getWsClient = function(wsurl) {
      const client = new SubscriptionClient(
        wsurl, {reconnect: true}, ws
      );
      return client;
    };
    
    // wsurl: GraphQL endpoint
    // query: GraphQL query (use gql`` from the 'graphql-tag' library)
    // variables: Query variables object
    const createSubscriptionObservable = (wsurl, query, variables) => {
      const link = new WebSocketLink(getWsClient(wsurl));
      return execute(link, {query: query, variables: variables});
    };
    const gql = require('graphql-tag');
    const SUBSCRIBE_QUERY = gql`
    subscription {
      apps {
        dr
        id
        appname
      }
    }
    `;
    function main() {
      const subscriptionClient = createSubscriptionObservable(
        'http://myserver:port/v1alpha1/graphql', // GraphQL endpoint
        SUBSCRIBE_QUERY, // Subscription query
      );
      var consumer = subscriptionClient.subscribe(eventData => {
        console.log("Received event: ");
        console.log(JSON.stringify(eventData, null, 2));
      }, (err) => {
        console.log('Err');
        console.log(err);
      });
    }
    main();
    • 效果

    说明

    主要是package.json

    • package.json
    {
      "name": "nodejs-graphql-subscriptions-boilerplate",
      "version": "1.0.0",
      "description": "",
      "main": "src/index.js",
      "scripts": {
        "start":"node index"
      },
      "author": "Karthik V",
      "license": "ISC",
      "dependencies": {
        "apollo-link": "^1.2.2",
        "apollo-link-ws": "^1.0.8",
        "graphql": "^0.13.2",
        "graphql-tag": "^2.9.2",
        "subscriptions-transport-ws": "^0.9.12",
        "ws": "^5.2.2"  // 这个比较重要,一般可能会忘记添加,会有提示websocket 没有实现,还好官方模版提供好了
      }
    }
    • 数据查询demo
    subscription:
    subscription appdemo($input:Int!) {
      apps (where:{
        id: {
          _eq:$input
        }}
      )
      {
        dr
        id
        appname
      }
    }
    查询参数:
    const subscriptionClient = createSubscriptionObservable(
        'http://server:port/v1alpha1/graphql', // GraphQL endpoint
        SUBSCRIBE_QUERY, // Subscription query
        {id:1}
      );

    参考资料

    https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate
    https://www.apollographql.com/docs/react/advanced/subscriptions.html

  • 相关阅读:
    Mac安装LightGBM
    用于视频超分辨率的可变形三维卷积
    ORB-SLAM3 单目地图初始化(终结篇)
    重用地图的单目视觉惯导SLAM系统
    2020,我的秋招感悟!
    超详细解读ORB-SLAM3单目初始化(下篇)
    基于改进的点对特征的6D位姿估计
    深入研究自监督单目深度估计:Monodepth2
    ORB-SLAM3 细读单目初始化过程(上)
    基于视觉和惯性传感器的移动机器人手遥操作系统
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9390246.html
Copyright © 2020-2023  润新知