【问题标题】:Using WebSockets to communicate between Java and C# desktop applications?使用 WebSockets 在 Java 和 C# 桌面应用程序之间进行通信?
【发布时间】:2014-01-20 08:34:05
【问题描述】:

我有兴趣将服务器作为 C# Web 应用程序部署到 GoDaddy,然后让用 C# 和 Java 开发的桌面客户端能够使用 WebSockets (RFC 6455) 订阅/发布到服务器。

我正在查看的支持 WebSocket 的库是 XSockets.NetSignalR

我找不到任何关于在 Java 中使用 XSockets.Net(不要与 XSocket.org 混淆)的信息。我了解 XSockets 以 MS .Net 框架和 Mono 环境为目标。但是,看看 SignalR,还有 SignalA,它是一个基于 Java 的 Android SignalR 客户端。

Thinking-out-loud...我知道有很多用于 Java 的 WebSocket 库,这表明如果我能够将消息(使用 WebSocket)从 Java 应用程序发布到服务器,那么我应该能够在 C# 中读取和处理它,因为 WebSocket 协议是一个标准。

到目前为止,我相信 SignalR 解决方案将满足我允许 C# 和 Java 应用程序在 Web 上通信的要求,但由于 SignalR 的传输要求,我的通信将不会使用 WebSockets。阅读 SignalR 要求,要激活 WebSockets 传输,我必须使用 Windows8+ 和 .Net Framework for 4.5+。 GoDaddy 不使用 Windows8 进行 Windows 托管,即使使用了,我的所有客户端也必须使用 Windows8,这不是保证。

所以问题是:除了使用 SignalR 和 XSockets.Net 之外,我如何让 C# 和 Java 桌面客户端通过 WebSockets 在网络上交谈?

非常感谢任何帮助!

编辑:我现在将研究部署一个 C# XSockets.NET 服务器并拥有一个 C# XSockets.NET 客户端和一个 Java JWebSocket 客户端,因为 JWebSockets 和 XSockets 都支持 WebSocket RFC6455 协议。如果这是成功的努力,我将在此处发布我的发现并关闭此问题。

【问题讨论】:

  • 您说“由于传输要求,我的通信不会使用 WebSockets。”那么你问如何使用websockets?还是你试过了还是不行?
  • @rogerdpack:阅读 SignalR 要求,要激活 WebSockets 传输,我必须使用 Windows8+ 和 .Net Framework 4.5+。如果不满足系统要求,有一个备用机制将使用 WebSockets 以外的传输。
  • 所以您在这里担心的是您不会拥有 Windows8+,因此您不能使用 SignalR,而您的问题是“如何使用其他东西与 c# 进行通信”?
  • @rogerdpack:没错,这就是为什么我研究了 XSockets.Net 但它似乎不支持 Java?我会更新我的问题以反映您的评论,谢谢!
  • 由于您的字节将来自java“通过websocket”,您可以在两侧使用您想要的任何库,它不必相同(现在,用于编组字节这样你就可以发送一些有意义的东西,这是一个不同的故事......)

标签: c# java websocket signalr xsockets.net


【解决方案1】:

您可以使用任何语言实现 RFC6455 客户端并使用 XSockets。但是请注意,XSockets 使用发布/订阅模式,您也必须实现该模式才能利用该平台。

好处是您实际上不必实现 RFC6455,因为您可以实现自定义(非 websocket 协议)并在从桌面(或其他任何东西)通信时使用它。由于 XSockets 中的所有内容都是一个插件,因此您可以添加自定义协议并仍然与客户端通信 RFC6455,因为 XSockets 将提供跨协议通信。

所以你必须实现的实际上只是 java 客户端中的发布/订阅功能。 目前可能没有任何 Java 客户端实现 IXSocketClient 接口,在涉及多平台支持时,我们专注于 Mono 而不是 Java。

如果您决定编写自己的 java 实现,我们将尽我们所能帮助您。

注意:从下一个版本(不远)开始,实现您的自定义协议并从任何使用 TCP/IP 的设备进行连接将非常容易

【讨论】:

    【解决方案2】:

    在我看来,你误解了一些事情。

    XSockets 和 SignalR 是完全面向特定平台.NET的库。它们都封装了WebSockets 的功能,这是一个独立于平台的标准,以便于使用。 这并不意味着您可以在所有平台上使用 XSocket 或 SignalR 库

    我认为为 XSockets 或 SignalR 创建一个 java 客户端会有点过头,并且会导致您严重依赖 3rd 方库。在您的情况下,我将继续在我的服务器端直接使用 WebSockets。然后我会为每个客户端使用一个处理 WebSockets 标准的库,每个客户端开发平台可能会有所不同。因此,您将依赖于一种通用标准,并且您将最大限度地减少对 3rd 方库的依赖。

    希望我能帮上忙!

    【讨论】:

    • websocket 协议很烂,你需要使用已经为你完成所有艰苦工作的库/框架。或者你可以自己做,但这会花费你很长时间。
    • @Kim 你没有仔细阅读我的回答。我还建议在客户端使用库来处理 Web 套接字。我只是说他/她不应该为 .net 库制作 Java 客户端。你不认为这会花费更多时间吗?我恭敬地不同意你的反对意见。
    • 我没有对你投反对票!其他人做到了,在开枪之前让你的信息正确。我知道你说什么,我的观点是你在服务器端比在客户端更需要一个库!即使我建议在双方都使用库!如果他有(例如)一个 .NET 服务器,我认为为它编写 Java 客户端没有任何问题。重要的是,您可以为选择的服务器编写自定义客户端和自定义协议,以便您可以通过任何设备(使用任何语言)进行通信,而无需考虑设备或语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多