gpt4 book ai didi

c# - 在 C# 中实现 TCP/IP JSONRPC 连接——需要设计建议

转载 作者:可可西里 更新时间:2023-11-01 02:41:37 25 4
gpt4 key购买 nike

我正在致力于通过 TCP/IP 实现 JSON RPC 连接,但我遇到了一个基本问题。目前我使用的是同步方法,效果很好。

我可以发送

{"id":1,"jsonrpc":"2.0","method":"Input.Home"}

并接收

{"id":1,"jsonrpc":"2.0","result":true}

这没有问题。当我收到通知时出现问题。这些可能随时无法预测地到达。我正在与 XBMC JSON RPC API 交互。如果 XBMC 发送了通知,我会同时收到多个 JSON 请求。例如

{"jsonrpc":"2.0","method":"GUI.OnScreensaverActivated","params":{"data":null,"sender":"xbmc"}}{"jsonrpc":"2.0","method":"GUI.OnScreensaverDeactivated","params":{"data":null,"sender":"xbmc"}}

这会导致 JSON.NET 崩溃,这是可以理解的。我的第一直觉是我需要异步接收这些通知,这样我就不必等到调用下一个方法来接收它们。然而,这使我上面显示的简单示例变得复杂,因为我不能再使用同步调用。即

SendJson(json);
result = ReceiveJson();

有没有一种干净的方法来实现它而不会使它过于复杂?感谢任何/所有建议。

最佳答案

这里是所有阅读的地方。如果你想进入它,这一切都是值得的。 http://msdn.microsoft.com/en-us/library/ms228969.aspx

不过要总结一下..

基本上,您需要创建一个实现 IAsyncResult 的对象。这将存储有关您的异步操作的状态,以及完成时的回调。

创建一个可以将您的 IAsyncResult 对象作为输入的方法,并且在该方法返回之前,它应该在您的 IAsyncResult 对象上调用 .SetCompleted() 。您可以在这个方法中执行您通常执行的工作。

然后您将创建 IAsyncResult 对象的实例(设置其数据和回调),然后调用 Task.Factory.StartNew([YourNewMethod],[YourInstanceOf IAsyncResult])。

这是需要发生的事情的核心。只需确保设置回调并处理异常即可。

如果您想了解我如何使用异步 http 处理程序执行 json-rpc 的工作示例,请查看 http://jsonrpc2.codeplex.com/SourceControl/changeset/view/13061#74311也在调用进程和设置异步对象的地方http://jsonrpc2.codeplex.com/SourceControl/changeset/view/13061#61720

希望对您有所帮助。

关于c# - 在 C# 中实现 TCP/IP JSONRPC 连接——需要设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com