博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GraphQL 进阶: 基于Websocket的实时Web应用开发
阅读量:5968 次
发布时间:2019-06-19

本文共 1744 字,大约阅读时间需要 5 分钟。

最新的 subscriptions-transport-ws 模块已经支持完全的Websocket传输, 也就是说GraphQL的三大操作: Query, Mutation, 以及Subscription 全部都可以走Websocket, 实现真正的基于GraphQL的实时Web应用.

完全Websocket传输比混合传输要简单. HTTP的传输是通过createNetworkInterface创建网络接口, 如果是Websocket, 则直接使用订阅客户端作为网络接口:

混合传输

# 创建HTTP网络接口用于: Query和Mutationconst httpNetworkInterface = createNetworkInterface({  uri: '/api'});# 创建Websocket客户端用于Subscriptionconst subscriptionClient = new SubscriptionClient('ws://localhost:7003/feedback', {  reconnect: true,  connectionParams: {    token: localStorage.getItem('token') ? localStorage.getItem('token') : null  }});# 合成一个 Hybrid 传输层对象const networkInterfaceWithSubscriptions = addGraphQLSubscriptions(  httpNetworkInterface,  subscriptionClient);# 用合成的网络接口示例去初始化ApolloClientconst client = new ApolloClient({  networkInterface: networkInterfaceWithSubscriptions,  connectToDevTools: true,  dataIdFromObject: o => {    if (o.__typename != null && o.id != null) {      return `${o.__typename}-${o.id}`;    } else {      return `${o.id}`;    }  }});

创建订阅客户端

const subscriptionClient = new SubscriptionClient(config.prod.ws, {  reconnect: true,  connectionParams: {    token: localStorage.getItem('token') ? localStorage.getItem('token') : null  }});

创建客户端

# 对于完全的Websocket传输, 我们只需要一个 SubscriptionClient 实例const client = new ApolloClient({  networkInterface: subscriptionClient,  connectToDevTools: true,  dataIdFromObject: o => {    if (o.__typename != null && o.id != null) {      return `${o.__typename}-${o.id}`;    } else {      return `${o.id}`;    }  }});

clipboard.png

升级到Websocket

之前的GraphQL API走的HTTP, 只需要创建 SubscriptionClient 的实例, 并且传递给 ApolloClient, 替换之前的混合传输, 直接无痛升级. 服务器代码不需要做任何修改.

最后澄清一下

Http和Websocket网络接口是用于传输数据的应用层协议. ApolloClient 客户端提供了GraphQL操作, 比如: Query, Mutation和Subscription.

转载地址:http://tpqax.baihongyu.com/

你可能感兴趣的文章
JQuery 如何选择带有多个class的元素
查看>>
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
查看>>
VS快速生成JSON数据格式对应的实体
查看>>
Word2vec 模型载入(tensorflow)
查看>>
Linux内核——定时器和时间管理
查看>>
RabbitMq消息序列化简述
查看>>
git忽略文件【转】
查看>>
Web上的支持的图片格式以及它们之间的区别
查看>>
随意而为
查看>>
jQuery监听文本框值改变触发事件(propertychange)
查看>>
HDU--2040
查看>>
甲骨文Java Archive
查看>>
查看数据库错误日志的位置
查看>>
电信网络拓扑图自动布局
查看>>
C#中List〈string〉和string[]数组之间的相互转换
查看>>
洛谷P1108 低价购买[DP | LIS方案数]
查看>>
通达信里的统计函数及区块背景函数
查看>>
redis主从配置<转>
查看>>
8 行 Node.js 代码实现代理服务器
查看>>
水印,图片验证码
查看>>