You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用服务器发送事件(Server-sent events)和EventSource的GraphQL订阅

要使用服务器发送事件(Server-sent events)和EventSource来进行GraphQL订阅,您需要在服务器端设置一个GraphQL订阅解析器,并在客户端使用EventSource来订阅服务器发送的事件。

以下是一个使用Node.js和Apollo Server的示例,展示了如何设置服务器发送事件和EventSource订阅GraphQL订阅:

服务器端代码(使用Node.js和Apollo Server):

const { ApolloServer, PubSub } = require('apollo-server');
const { createServer } = require('http');
const { execute, subscribe } = require('graphql');
const { SubscriptionServer } = require('subscriptions-transport-ws');
const { makeExecutableSchema } = require('@graphql-tools/schema');

// 初始化PubSub实例
const pubsub = new PubSub();

// 定义GraphQL类型和解析器
const typeDefs = `
  type Query {
    hello: String
  }

  type Subscription {
    greeting: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello World!',
  },
  Subscription: {
    greeting: {
      subscribe: () => pubsub.asyncIterator(['GREETING']),
    },
  },
};

// 创建可执行的GraphQL schema
const schema = makeExecutableSchema({ typeDefs, resolvers });

// 创建Apollo Server实例
const server = new ApolloServer({
  schema,
});

// 在HTTP服务器上安装Apollo Server
const httpServer = createServer();
server.installSubscriptionHandlers(httpServer);

// 启动HTTP服务器
httpServer.listen({ port: 4000 }, () => {
  console.log(`Server ready at http://localhost:4000${server.graphqlPath}`);
  console.log(`Subscriptions ready at ws://localhost:4000${server.subscriptionsPath}`);
});

// 创建SubscriptionServer实例,用于处理GraphQL订阅
new SubscriptionServer(
  {
    execute,
    subscribe,
    schema,
  },
  {
    server: httpServer,
    path: server.subscriptionsPath,
  }
);

客户端代码(使用JavaScript和EventSource):

const eventSource = new EventSource('http://localhost:4000/graphql', {
  withCredentials: true,
});

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('Received event:', data);
};

eventSource.onerror = () => {
  console.error('Error occurred while receiving events.');
};

eventSource.onopen = () => {
  console.log('EventSource connection established.');
};

eventSource.addEventListener('greeting', (event) => {
  const data = JSON.parse(event.data);
  console.log('Received greeting:', data);
});

在此示例中,我们使用Apollo Server设置了一个具有GraphQL订阅的服务器。在服务器端,我们定义了一个名为"greeting"的订阅字段,该字段将返回一个异步迭代器,该迭代器将在每次订阅时触发事件。在客户端,我们使用EventSource来建立与服务器的连接,并通过监听"message"事件来接收服务器发送的事件。我们还为"greeting"事件添加了一个特定的事件监听器,以便单独处理该事件。

请注意,为了让EventSource可以正常工作,您需要确保服务器允许跨域访问(CORS)。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

KubeWharf | 大规模K8S集群管理系统

事件异常追踪等。开源项目KubeWharf就是用来解决管理和使用大规模kubernetes集群面临的各种问题的,接下来和大家分享一下自己对KubeWharf的各个子项目的理解。## 1.kubebrain 当k8s集群规模逐渐扩大的时候,k... 和集群运行时间的积累,ectd的性能会有一定的减弱,而TiKV通过水平扩容,可以有效的降低性能的减弱,所以在大规模集群模式下,是可以选择kubebrain代替ectd的。虽然kubebrain支持社区版api-server,但字节官方推荐使用...

为了使远程工作不受影响,我写了一个内部的聊天室 | 社区征文

它**实现了浏览器与服务器全双工通信** —— 允许服务器主动发信息给客户端。和HTTP的Request请求不同,在实现websocket连接的过程中,浏览器需要发出websocket连接请求,然后服务器做出回应,这个过程也就是常说的“握... 可以调用`wx.onSocketOpen`这个API监听websocket连接打开事件:```wx.onSocketOpen(function(res){ console.log('WebSocket连接已打开!');})```当一个socket打开以后,最重要的内容则是通过该socket发送一个...

eBPF 完美搭档:连接云原生网络的 Cilium

Serverless 场景下甚至短至几分钟,几秒钟随着容器密度的增大,以及生命周期的变短,对原生容器网络带来的挑战也越来越大。# **当前** **K** **8s** **Service** **负载均衡** **的实现现状**在 Cilium 出现之前... NodeMonitor: Listening for events on 8 CPUs with 64x4096 of shared memoryCilium health daemon: OkIPAM: IPv4: 68/254 allocated from 10.0.0.0/24,BandwidthManager: ...

云原生 x AI 时代的微服务架构最佳实践—— CloudWeGo 技术沙龙·北京站报名开启

SSE(Server-Sent Events)是一种服务器主动发送数据到客户端的机制,基于 HTTP 提供单向流能力。随着 AIGC/LLM 的流行,字节跳动内部和社区都对 SSE 有强烈诉求。两位同学将会分享 SSE 的原理,Hertz SSE 的设计与实现... 和成本优化解决方案。下载地址:**CloudWeGo*** https://www.cloudwego.cn/zh/* https://www.cloudwego.io/zh/**火山引擎开发者社区**https://developer.volcengine.com/resource/73086292...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

使用服务器发送事件(Server-sent events)和EventSource的GraphQL订阅-优选内容

KubeWharf | 大规模K8S集群管理系统
事件异常追踪等。开源项目KubeWharf就是用来解决管理和使用大规模kubernetes集群面临的各种问题的,接下来和大家分享一下自己对KubeWharf的各个子项目的理解。## 1.kubebrain 当k8s集群规模逐渐扩大的时候,k... 和集群运行时间的积累,ectd的性能会有一定的减弱,而TiKV通过水平扩容,可以有效的降低性能的减弱,所以在大规模集群模式下,是可以选择kubebrain代替ectd的。虽然kubebrain支持社区版api-server,但字节官方推荐使用...
为了使远程工作不受影响,我写了一个内部的聊天室 | 社区征文
它**实现了浏览器与服务器全双工通信** —— 允许服务器主动发信息给客户端。和HTTP的Request请求不同,在实现websocket连接的过程中,浏览器需要发出websocket连接请求,然后服务器做出回应,这个过程也就是常说的“握... 可以调用`wx.onSocketOpen`这个API监听websocket连接打开事件:```wx.onSocketOpen(function(res){ console.log('WebSocket连接已打开!');})```当一个socket打开以后,最重要的内容则是通过该socket发送一个...
eBPF 完美搭档:连接云原生网络的 Cilium
Serverless 场景下甚至短至几分钟,几秒钟随着容器密度的增大,以及生命周期的变短,对原生容器网络带来的挑战也越来越大。# **当前** **K** **8s** **Service** **负载均衡** **的实现现状**在 Cilium 出现之前... NodeMonitor: Listening for events on 8 CPUs with 64x4096 of shared memoryCilium health daemon: OkIPAM: IPv4: 68/254 allocated from 10.0.0.0/24,BandwidthManager: ...
云原生 x AI 时代的微服务架构最佳实践—— CloudWeGo 技术沙龙·北京站报名开启
SSE(Server-Sent Events)是一种服务器主动发送数据到客户端的机制,基于 HTTP 提供单向流能力。随着 AIGC/LLM 的流行,字节跳动内部和社区都对 SSE 有强烈诉求。两位同学将会分享 SSE 的原理,Hertz SSE 的设计与实现... 和成本优化解决方案。下载地址:**CloudWeGo*** https://www.cloudwego.cn/zh/* https://www.cloudwego.io/zh/**火山引擎开发者社区**https://developer.volcengine.com/resource/73086292...

使用服务器发送事件(Server-sent events)和EventSource的GraphQL订阅-相关内容

SQL自定义查询(SaaS)

1. 使用说明 1.1 基本用法select event, event_time from events where event_date >= '2020-08-10' and event_date <= '2020-08-18' and event_time > 1597161600limit 20;前端展示1000条,下载可下载1000000条。 ... 任何SQL都建议指定事件发生时间,否则根据event_time进行推导。 event_time 事件发生时间戳,10位。 当且仅当使用event_time作为约束条件时,会自动推导event_date;因此不建议使用time和server_time进行时间条件的约...

SQL自定义查询(SaaS)

1. 使用说明 1.1 基本用法SQL select event, event_time from events where event_date >= '2020-08-10' and event_date <= '2020-08-18' and event_time > 1597161600limit 20;前端展示1000条,下载可下载1000000... 任何SQL都建议指定事件发生时间,否则根据event_time进行推导。 event_time 事件发生时间戳,10位。 当且仅当使用event_time作为约束条件时,会自动推导event_date;因此不建议使用time和server_time进行时间条件的约...

可修改参数列表(MySQL 8.0)

10 binlog_rows_query_log_events OFF 否 [ONOFF] 11 binlog_stmt_cache_size 32768 否 [4096-16777216] 12 block_encryption_mode aes-128-ecb 否 [aes-128-ecbaes-192-ecbaes-256-ecbaes-128-cbcaes-192-cbcaes-256-cbc] 13 bulk_insert_buffer_size 4194304 否 [0-4294967295] 14 character_set_filesystem binary 否 [utf8latin1gbkbinary] 15 character_set_server utf8mb3 是 [utf8mb3latin1gbkgb18030utf8mb4] 16 collat...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

SQL自定义查询(私有化)

1.使用说明 1.1 基本用法select event, event_timefrom eventswhere event_date >= '2020-08-10'and event_date <= '2020-08-18'and event_time > 1597161600limit 20;前端展示1000条,下载可下载1000000条。1.2 字... 任何SQL都建议指定事件发生时间,否则根据event_time进行推导 event_time事件发生时间戳,10位 当且仅当使用event_time作为约束条件时,会自动推导event_date;因此不建议使用time和server_time进行时间条件的约束 t...

管理事件通知(Python SDK)

和对象的操作都通过 TosClientV2 实现 client = tos.TosClientV2(ak, sk, endpoint, region) config = CloudFunctionConfiguration( 事件通知ID id='1', 事件类型 events=['t... except tos.exceptions.TosServerError as e: 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息 print('fail with server error, code: {}'.format(e.code)) request id 可定位具体问题,强烈建...

iOS 上传 SDK 接入文档(旧版)

如下所示: source 'https://github.com/volcengine/volcengine-specs.git'pod 'TTSDK', 'x.x.x.x', :subspecs => [ 'Uploader', 上传 //推荐使用最新稳定版,具体版本号,例如x.x.x.x 修改为:1.20.2.2302 ]说明 v... //authToken签名是从app server获取,序列化为字典。 NSDictionary* result = jsonObject[@"result"]; NSDictionary* authParameter = @{TTFileUploadAccessKey:result[@"AccessKeyId"]:@"", TTFileUploadSe...

可修改参数列表(MySQL 5.7)

10 binlog_rows_query_log_events OFF 否 [ONOFF] 11 binlog_stmt_cache_size 32768 否 [4096-16777216] 12 block_encryption_mode aes-128-ecb 否 [aes-128-ecbaes-192-ecbaes-256-ecbaes-128-cbcaes-192-cbcaes-256-cbc] 13 bulk_insert_buffer_size 4194304 否 [0-4294967295] 14 character_set_filesystem binary 否 [utf8latin1gbkbinary] 15 character_set_server utf8 是 [utf8latin1gbkgb18030utf8mb4] 16 collation_se...

数据导入(私有化查看)

使用设备ID + uuid 确定一个用户。对于一个 uuid 存在的用户,历史数据迁移完成,以及接入 SDK 后能识别为同一个用户。但对于 uuid 不存在的匿名用户,若历史数据中无设备ID,则可能在接入 SDK 后被识别为不同用户。 2.1.2事件数据格式 字段 数据类型 是否可以为空 如果为空填充为 含义 global_id String 否 用户非空唯一id,用于关联用户和事件 event String 否 事件名 time Long 否 事件发生的毫秒时间戳 s...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询