为什么Web套接字不使用SOAP?

Ben*_*nny 7 html5 soap websocket

首先,我打算没有敌意也不打算,只想知道别人的想法.我正在研究客户端和服务器之间的双向通信; 客户端是一个Web应用程序.在这一点上,我有几个选择:MS专有的双工绑定,从我听到的不可靠和不自然:彗星和网络套接字(对于支持的浏览器).

我知道这个问题在其他方面已经被问过,但我对这个方法有一个更具体的问题.考虑到Web套接字是客户端的,客户端代码位于JavaScript中.是否真的打算直接在JavaScript中构建一大块应用程序?为什么W3C在Web服务中没有这样做?如果我们能够使用SOAP提供合同并定义事件以及涉及的现有消息传递,那会不会更容易?到目前为止,感觉就像棒子的短端.

为什么不简单地利用JS动态特性并将大量代码留在它所属的位置....在服务器上?

代替

mysocket.send("AFunction|withparameters|segmented");
Run Code Online (Sandbox Code Playgroud)

我们可以说

myServerObject.AFunction("that", "makessense");
Run Code Online (Sandbox Code Playgroud)

而不是

...
mysocket.onmessage = function() { alert("yay! an ambiguous message"); }
...
Run Code Online (Sandbox Code Playgroud)

我们可以说

...
myServerObject.MeaningfulEvent = function(realData) { alert("Since I have realistic data....");  alert("Hello " + realData.FullName); }
...
Run Code Online (Sandbox Code Playgroud)

HTML 5永远占据了......我们是否在错误的方向上浪费了大量的精力?思考?

Rob*_*bin 19

听起来像你还没有完全掌握Websockets的概念.例如你说:

考虑Web套接字是客户端的

事实并非如此,套接字有两面,您可以将它们视为服务器和客户端,但是一旦建立连接,区别就会模糊 - 您可以将客户端和服务器视为"对等" - 每个可以随时写入或读入连接它们的管道(套接字连接).我怀疑你会从在TCP上学习更多关于HTTP的工作中受益 - WebSockets就像这样与HTTP类似/类似.

关于SOAP/WSDL,从围绕TCP/WebSocket/HTTP的对话的角度来看,您可以将所有SOAP/WSDL对话视为与HTTP相同(即正常的网页流量).

最后,请记住网络编程的堆叠特性,例如SOAP/WSDL如下所示:

SOAP/WSDL
--------- (sits atop)
HTTP
--------- (sits atop)
TCP
Run Code Online (Sandbox Code Playgroud)

WebSockets看起来像这样

WebSocket
--------- (sits atop)
TCP
Run Code Online (Sandbox Code Playgroud)

HTH.

  • 好吧,堆叠部分并不完全正确.虽然SOAP在大多数情况下是通过HTTP发送的,但WSDL允许定义任意绑定.由于WSDL在设计上非常易于扩展,因此可以定义和实现SOAP over Websockets绑定.那样它就是SOAP - > Websocket - > TCP,其中SOAP就是消息编码格式.即使在这个答案中勾勒出的例子中,通过websocket发送的数据大多数都是以某种方式编码的,例如JSON.所以正确的比喻是JSON - > Websocket - > TCP vs. SOAP - > Websocket - > TCP vs. SOAP - > HTTP - > TCP. (5认同)