ela*_*hen 7 server-sent-events graphql eventsource
我正在考虑使用服务器发送的事件作为支持 api 来实现“订阅”类型。
我正在努力的是接口,更准确地说,是这种操作的 http 层。
问题:
使用本机EventSource不支持:
虽然#1 是无可辩驳的,但#2 可以使用查询参数来规避。
查询参数有大约 2000 个字符的限制(可以争论),这使得仅仅依赖它们感觉太脆弱了。
我正在考虑的解决方案是为每个可能的事件创建一个专用端点。
例如:代表各方之间已完成交易的事件的 URI:
/graphql/transaction-status/$ID
将转换为服务器中的此查询:
subscription TransactionStatusSubscription {
status(id: $ID) {
ready
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:
可能还有更多我遗漏的问题。
也许你能想到更好的方法?一个可以使用 EventSource 提供请求有效负载的更好方法吗?
Dan*_*den 10
GraphQL 中的订阅通常使用 WebSockets 实现,而不是 SSE。Apollo 和 Relay 都支持使用subscriptions-transport-ws客户端来监听事件。Apollo Server 包含对使用 WebSockets 订阅的内置支持。如果您只是想实施订阅,最好使用这些现有解决方案之一。
这就是说,有一个为利用上证所订阅图书馆在这里。它看起来不再维护了,但是如果您一心想要让 SSE 工作,您可以浏览源代码以获取一些想法。查看源代码,作者似乎通过使用返回订阅 ID 的 POST 请求初始化每个订阅来绕过您上面提到的限制。
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |