1 个不稳定版本
0.1.0 | 2019年10月26日 |
---|
#337 in #proxy
21KB
268 代码行
SocketHook
注意:这是一个 Rust 实现/移植自 sockethook 实现。
SocketHook 是一个用 Rust 编写的 Webhook 到 WebSocket 代理。它旨在构建围绕提供 Webhooks 的第三方 API 的实时应用程序。例如,SocketHook 可以用来创建 Github 部署的实时流或 Shopify 订单的实时视图。
用法
SocketHook 是用 Rust 编写的,可以通过运行以下命令安装:
$cargo install sockethook
使用以下命令启动工具:
$ sockethook
2019-10-26T17:15:56Z INFO sockethook] Sockethook is ready and listening at 0.0.0.0:1234 ✅
SocketHook 现在已准备好开始接收 Webhooks!可以通过 /socket
后跟您想要订阅的端点来连接 WebSocket,例如:/socket/order/created
。现在将向所有监听特定端点的订阅者广播发送到 /hook/order/created
的任何 Webhook 请求。
广播的消息将被 JSON 编码,并包含有关 Webhook 请求的信息。以下是从 Shopify Webhook 中的一个示例消息:
{
"headers": {
"accept": "*\/*",
"accept-encoding": "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
"connection": "close",
"content-length": "4264",
"content-type": "application\/json",
"user-agent": "Ruby",
"x-forwarded-for": "35.231.14.37",
"x-forwarded-proto": "https",
"x-shopify-hmac-sha256": "wa5ZVAJPjbtr4Oj8xVnt\/jLWwfD9JdGFcdrjY4VgORQ=",
"x-shopify-order-id": "820982911946154508",
"x-shopify-shop-domain": "fabianlindfors.myshopify.com",
"x-shopify-test": "true",
"x-shopify-topic": "orders\/create"
},
"endpoint": "\/order\/created",
"data": {
"app_id": null,
"billing_address": {
"address1": "123 Billing Street",
"address2": null,
"city": "Billtown",
"company": "My Company",
"country": "United States",
"country_code": "US",
"first_name": "Bob",
"last_name": "Biller",
"latitude": null,
"longitude": null,
"name": "Bob Biller",
"phone": "555-555-BILL",
"province": "Kentucky",
"province_code": "KY",
"zip": "K2P0B0"
}
...
}
}
如果请求的内容类型是 JSON,则 data
字段将包含 JSON 主体。否则,data
将是主体的字符串。
命令行选项
可以将两个可能的选项传递给 SocketHook,即 --port
和 --address
。 --port
指定要监听的端口(默认为 1234)和 --address
设置要绑定的特定地址。
$ sockethook --port 8000
$ sockethook --address 127.0.0.1
身份验证
SocketHook 不包含任何身份验证,这意味着默认情况下所有端点和套接字都是公开可用的。推荐的方式是使用反向代理或类似工具,这提供了很多灵活性。示例包括 nginx、Caddy 和 Traefik。
许可证
SocketHook 在 MIT 许可证下发布。
改进
以下是与原始的 sockethooks(用 Go 编写)相比,此实现中的改进列表
- 在断开连接时清理 WebSocket 连接
- 处理 Cors
- 在客户端套接字管理周围使用 RWLock
- 允许将套接字和挂钩扩展到多台计算机
依赖关系
~26–37MB
~649K SLoC