开始了解networking套接字和http请求(和STOMP)

我最近join了一个新的项目,我负责使用networking套接字来实现stream数据。 这个想法是目前通过HTTP请求(以RESTful的方式)暴露的信息,他们希望通过networking套接字暴露。

在过去的48个小时里,我做了一些关于networking套接字和STOMP的研究,并希望得到以下几点的解释:

  1. 因此,对于客户端和服务器通过Web套接字而不是通过HTTP请求/响应进行连接,他们首先需要同意在它们之间build立一个Web套接字连接。 这是通过HTTP GET完成一个唯一的标头传递,说他们要使用一个Web套接字连接,而不是?

  2. 理论上说,有一大堆不同的数据通过一些API暴露给浏览器。 想象一下,有很多不同的HTTP请求可以做成GET,POST,DELETE。 所以要把所有这些信息的某些部分通过一个web套接字进行stream式传输,是简单地改变每个资源的当前GET请求来检查这个特殊的websocket头部是否在那里,然后做一些事情? 或者还有其他的东西需要通过networking套接字来暴露某些数据。 如果你从HTTP请求初始化套接字,我可能会误解HTTP和套接字的关系。

我认为这是我的两个主要问题,我相信这些答案将会指引我继续学习更多关于这个主题的正确方向。 我正在试图find任何好的示例代码示例,但我正试图理解这一点,足以在一周内实现。

因此,对于客户端和服务器通过Web套接字而不是通过HTTP请求/响应进行连接,他们首先需要同意在它们之间build立一个Web套接字连接。 这是通过HTTP GET完成一个唯一的标头传递,说他们要使用一个Web套接字连接,而不是?

是的,或多或less。 标题是:

Connection: Upgrade Upgrade: websocket Sec-WebSocket-Key: <random string, base64 encoded> Sec-WebSocket-Version: <version> 

通常version是13这些天,虽然我相信8也在使用中。

如果服务器同意websocket,它将返回HTTP代码101以下头:

 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: <base64 encoded hash based on Sec-WebSocket-Key> 

理论上说,有一大堆不同的数据通过一些API暴露给浏览器。 想象一下,有很多不同的HTTP请求可以做成GET,POST,DELETE。 所以要把所有这些信息的某些部分通过一个web套接字进行stream式传输,是简单地改变每个资源的当前GET请求来检查这个特殊的websocket头部是否在那里,然后做一些事情? 或者还有其他的东西需要通过networking套接字暴露某些数据。 如果你从HTTP请求初始化套接字,我可能会误解HTTP和套接字的关系。

这听起来像你明白这一点,但我会指出,你只能用GET来启动一个WebSocket。

从你所描述的,WebSockets实际上是你想要的,并不清楚。 WebSockets用于服务器和客户端之间的双向通信。 如果您只是希望能够从服务器传输到客户端,那么使用服务器发送的事件将使您更容易。

我花了超过48个小时的时间才真正把我的脑子想到这里来。 这是来自AJAX的巨大变化。

你可能在考虑太低的水平。 如果您将消息广播到多个浏览器,则有多个消息队列系统可以通过websockets(使用STOMP进行多个或全部)进行通信。

但是,如果您只需要发送私人数据,则可能需要在STOMP级别(或更低)停止。 这个技术现在还不是很成熟,因为大部分解决scheme都涉及前面提到的消息队列。 STOMP理论上应该允许你在每一边(浏览器和服务器)有多个端点来获取消息(在JavaScript和C#之间用JSON或XML进行序列化)。 如果你不喜欢这种技术,使用WebSockets本身来传递消息是相当容易的。 在这种情况下,每边都有一个接收器,并且传递一个简单的结构,就像一个string,它指定了消息后面跟着一个逗号,然后将消息本身序列化为任何适用于您的技术(我更喜欢浏览器端的JSON,但XML可以工作)。

祝你好运,并更新你的问题或评论你接受的答案与任何你学到的东西,而不是在答案,以便其他人可以从中学习。

更新:有人提供更多关于.NET的WebSockets实现的信息,请回答一些我不知道,也没有时间调查的细节。 我的回答不完整,在赏金到期之前,我没有时间正确回答。