6个版本 (3个破坏性更改)
0.6.2 | 2024年4月10日 |
---|---|
0.6.1 | 2023年10月9日 |
0.6.0 | 2023年1月11日 |
0.4.0 | 2022年11月3日 |
0.1.0 | 2022年9月15日 |
#54 in WebSocket
25KB
316 行
WebMocket
WebSocket客户端的(集成)测试和开发服务器。
- 向客户端发送自定义消息。
- 记录客户端发送的消息。
此服务器通过HTTP请求控制。正在测试的客户端将使用WebSocket连接到它,然后我们可以通过向API发送HTTP请求与之交互。相同的API可以用来检查此客户端向服务器发送了什么消息。
我需要这个来端到端和集成测试一个监听WebSocket的机器人。
webmocket
-
启动webmocket网络服务器。
webmocket # or "cargo run" # 2022-09-15T14:38:07Z INFO webmocket] Listening on 127.0.0.1:3000
-
连接WebSocket客户端(网页、机器人、客户端等)。例如 wscat。然后向服务器发送几条消息。 通常这是测试的主题。
wscat --connect http://127.0.0.1:3000/ws # Connected (press CTRL-C to quit) # > hello, this is the first message # > my name is Foo and I am a Bar # > { "message": "this would be JSON" }
-
检查从客户端接收到的消息
curl http://127.0.0.1:3000/messages | jq # [ # "hello, this is the first message", # "my name is Foo and I am a Bar", # "{ \"message\": \"this would be JSON\" }" # ]
-
使用正常的HTTP库向客户端发送WebSocket消息。例如
curl
。wscat --connect http://127.0.0.1:3000/ws curl -X POST -H"Content-type: text/plain; charset=UTF-8" \ --data 'Hello from the server 👋' \ http://127.0.0.1:3000/messages
我们应该看到wscat将消息打印到控制台。
-
检查ping/pong
wscat --connect http://127.0.0.1:3000/ws --show-ping-pong curl -X POST -H"Content-type: text/plain; charset=UTF-8" \ --data 'Hello from the server 👋' \ http://127.0.0.1:3000/ping curl http://127.0.0.1:3000/messages
我们应该看到wscat回复服务器的Ping消息,并返回Pong。然后我们可以检查服务器是否收到了Pong。
安装
为了在开发机器上安装平台,运行
cargo install webmocket
待办事项:构建二进制文件并使其可供下载。
运行
webmocket
配置
Webmocket通过环境变量进行配置。这些变量必须在启动之前设置。
变量 | 默认 | |
---|---|---|
WEBMOCKET_ADDR |
监听主机的IP地址。必须是一个有效的IPv4地址 | 127.0.0.1 |
WEBMOCKET_PORT |
服务将监听的端口。必须是一个有效的Unix端口 | 3000 |
WEBMOCKET_WS_PATH |
WebSocket可以连接的路径。必须以/开始 | /ws |
例如,要设置所有变量,可以运行
WEBMOCKET_ADDR=127.0.0.2 WEBMOCKET_PORT=8080 WEBMOCKET_WS_PATH="/messages/user" cargo run
Docker
另一种选择是在容器中运行webmocket。在例如CI管道中或在没有cargo的情况下非常有用。
docker run--rm--分离--公开3000:3000伯克斯/韦莫克特:最新
正如在配置部分所述,环境变量可以传递给服务进行配置。例如
docker run--rm--分离--公开3000:3000 --envWEBMOCKET_WS_PATH=/聊天/流
这将运行Webmocket服务,其中WebSocket端点位于http://0.0.0.0:3000/chat/stream。
注意:端口3000在镜像中是硬编码的,因此将WEBMOCKET_PORT
更改为除3000之外的其他值将不起作用。
测试
获取源代码,然后
cargo test
这将在本地构建应用程序并运行测试。
发布
待办事项:CI/CD设置
部署
待办事项:CI/CD设置
限制
该服务旨在用于本地开发或测试(CI服务器等):它将其数据库保存在内存中。这意味着如果您要将大量数据发送给它,它将需要大量的内存。
由于难以实现,服务未绑定到HTTPS(或SSL)。如果客户端坚持只使用SSL,您可能需要在此之前配置一些代理。
待办事项
如果有需求,或者有pull请求到达,可以添加一些附加功能。
- 将其制作成库以包含在测试中,而不是作为独立服务运行。
- 代理到实际WebSocket,并记录消息,就像它们将从服务器发送到客户端一样。
- 代理到实际WebSocket,并记录消息,就像它们将从客户端发送到服务器一样。
- 以VCR风格(尽管不一定是该格式)存储这些记录的消息。
- 按需将记录的服务器到客户端消息发送到客户端。
- 对记录的客户端到服务器消息设置期望,以匹配客户端发送预期内容。
依赖
~13-25MB
~364K SLoC