使用WebSockets在Java和C#桌面应用程序之间进行通信?

3
我希望将一个C# Web应用程序部署到GoDaddy服务器上,然后使用WebSockets(RFC 6455)让开发的C#和Java桌面客户端能够订阅/发布到该服务器。我正在寻找支持WebSocket的库,其中包括XSockets.NetSignalR
我无法找到有关在Java中使用XSockets.Net(不要与XSocket.org混淆)的任何信息。我知道XSockets针对MS .Net框架和Mono环境。但是,通过查看SignalR,也有一个名为SignalA的基于Java的SignalR客户端适用于Android。
思考一下...我知道有很多Java的WebSocket库,这表明如果我能够从Java应用程序发布消息(使用WebSocket)到服务器,那么我就应该能够在C#中读取并处理它,因为WebSocket协议是一个标准。
因此,到目前为止,我相信SignalR解决方案将满足我的要求,以允许C#和Java应用程序在Web上进行通信,但由于SignalR的传输要求,我的通信将不利用WebSockets。通过阅读SignalR要求,要激活WebSockets传输,我必须使用Windows8+和.Net Framework 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?或者你尝试过它但没有成功吗? - undefined
所以你的担心是你没有Windows8+,所以不能使用SignalR,你的问题是“如何通过其他方式与C#通信”? - undefined
@rogerdpack:没错,这就是我为什么研究了XSockets.Net,但似乎它不支持Java?我会更新我的问题以反映您的评论,谢谢! - undefined
由于您的字节将通过Java中的WebSocket传输,您可以在两端使用任何库,它们不必相同(现在,对于将字节编组为可发送有意义的内容,那是另一回事...) - undefined
@lucidgold 好消息!XSockets刚刚发布了跨协议通信功能。这意味着您可以创建自定义协议,并从任何语言或设备连接,同时仍然能够与使用RFC6455等协议的浏览器进行套接字通信。 - undefined
显示剩余7条评论
2个回答

4
您可以在任何语言中实现 RFC6455 客户端,并使用 XSockets。但请注意,XSockets 使用发布/订阅模式,您还需要实现此功能以充分利用该平台。
好处是,您实际上不必实现 RFC6455,因为您可以实现自定义(非 Websocket 协议)并在从桌面(或其他任何设备)通信时使用它。由于 XSockets 中的所有内容都是插件,因此您可以添加自定义协议并仍然与使用 RFC6455 的客户端进行通信,因为 XSockets 将提供跨协议通信。
因此,您只需在 Java 客户端中实际实现发布/订阅功能即可。
今天可能没有任何实现 IXSocketClient 接口的 Java 客户端,而我们在涵盖多平台支持时更注重 Mono 而不是 Java。
如果您决定编写自己的 Java 实现,我们将尽我们所能帮助您。
注意:在下一个版本(不久之后)中,将非常容易实现您的自定义协议并从任何使用 TCP/IP 的设备进行连接。

0
在我谦虚的观点中,你对一些事情有了误解。
XSockets和SignalR是完全面向特定平台.NET的库。它们都封装了WebSockets的功能,这是一个平台无关的标准,以便于使用。但这绝不意味着你可以在所有平台上使用XSocket或SignalR库。
我认为为XSockets或SignalR创建一个Java客户端会过度复杂化,并且会使你过度依赖第三方库。在你的情况下,我建议直接在服务器端使用WebSockets。然后,针对每个客户端开发平台使用处理WebSockets标准的库,这可能因客户端开发平台而异。因此,你将依赖于一个通用标准,并最大程度地减少对第三方库的依赖。
希望能对你有所帮助!

1
WebSocket协议很糟糕,你需要使用一个已经完成了所有艰苦工作的库/框架。或者你可以自己完成所有工作,但这将花费很长时间。 - undefined
1
@Kim 你没有仔细读我的回答。我还建议在客户端使用一个库来处理网络套接字。我只是说他/她不应该为一个 .net 库编写一个 Java 客户端。难道你不认为这会花费更多的时间吗?我对你的投票反对持有不同意见。 - undefined
2
我没有给你点踩!是别人做的,请在冲动行事之前核实信息。我知道你说的是什么,我的观点是,在服务器端,你更需要一个库,而不是在客户端!尽管我建议在两边都使用库!如果他有(例如)一个.NET服务器,我认为用Java编写客户端没有问题。重要的是,你可以为所选择的服务器编写自定义客户端和自定义协议,以便无论设备或语言如何,都能进行通信。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接