使用 JSON 数据向 websocket 服务器发送请求
Posted
技术标签:
【中文标题】使用 JSON 数据向 websocket 服务器发送请求【英文标题】:Send request to websocket server using JSON data 【发布时间】:2020-01-20 21:54:00 【问题描述】:基本上,我在一台计算机上运行 OBS,我需要通过第二台计算机与之交互。 我正在使用一个OBS-WebSocket 插件,它在 OBS 上创建一个 websocket 服务器来发送远程命令。
我的目标是在我按下第二台(远程)计算机上的键时在 OBS 上设置可见/不可见源。 我对那个按键部分没有意见。我的问题是我不知道如何正确地将请求/命令发送到 websocket 插件(它需要 JSON 格式,因为这是数据的格式)。
主代码(C#)
static void Main(string[] args)
using (var ws = new WebSocket("ws://192.168.1.1:1122"))
ws.Connect();
ws.OnMessage += (sender, e) =>
Console.WriteLine(e.Data);
ws.Send("REPLACE WITH JSON REQUEST DATA");
Console.ReadKey(true);
下面是我在 OBS 中打开或关闭源时从 websocket 接收到的数据示例。
您可以清楚地看到“可见性”是真还是假。
*这个 'item-visible' 是我需要设置的让 OBS 隐藏或显示来源的设置。*
↓ 源在 OBS 中可见 ↓
"item-id": 10,
"item-name": "map",
"item-visible": true,
"scene-name": "ONHOLD",
"update-type": "SceneItemVisibilityChanged"
↓ 来源隐藏在 OBS 中 ↓
"item-id": 10,
"item-name": "map",
"item-visible": false,
"scene-name": "ONHOLD",
"update-type": "SceneItemVisibilityChanged"
【问题讨论】:
【参考方案1】:你可以在 Github 官方 repo 中看到 example test usages。
如果您查看那里,您会看到应该解析 e.Data
。然后,您可以根据需要进行分配,例如:
public string SetIsVisible(MessageEventArgs e, bool isVisible)
JObject body = JObject.Parse(e.Data);
body["item-visible"] = isVisible;
return body.ToString();
...然后将返回的字符串发送到您的 websocket:
ws.Send(SetIsVisible(e, isVisible)); // isVisible is boolean you should assign
附:如果您想使用静态类型的 DTO,只需生成一个(例如 here):
public partial class OBSSource
[JsonProperty("item-id")]
public long ItemId get; set;
[JsonProperty("item-name")]
public string ItemName get; set;
[JsonProperty("item-visible")]
public bool ItemVisible get; set;
[JsonProperty("scene-name")]
public string SceneName get; set;
[JsonProperty("update-type")]
public string UpdateType get; set;
...然后:
public string SetIsVisible(MessageEventArgs e, bool isVisible)
OBSSource obsSource = JsonConvert.DeserializeObject<OBSSource>(e.Data);
obsSource.ItemVisible = isVisible;
return JsonConvert.SerializeObject(obsSource);
...然后将其序列化到上面的 websocket 中。
【讨论】:
以上是关于使用 JSON 数据向 websocket 服务器发送请求的主要内容,如果未能解决你的问题,请参考以下文章
通过 Django Channels 和 Websockets 向客户端推送实时更新
如何使用 Python(带有 websockets 的服务器)和 JavaScript(客户端)接收 JSON 数据