zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    javaIO流之 字节与字符流认识
    Servlet容器理解(生命周期、servletContext作用域、servlet装载方式)
    是否改变原数组的常用方法
    时间空间复杂度的初步理解---后续补充
    java集合框架之 Set
    【原】SQLPLUS支持上下翻页
    【转】shell脚本写的俄罗斯方块游戏
    【原】Oracle 11.2.0.1 64bit for RHEL6.0 Server x86_64 静默安装
    【原】RHEL6.0企业版安装
    【原】记录一句话
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9390246.html
Copyright © 2011-2022 走看看