2012-08-01 151 views
7

我想了解更多关于websocket及其内部实现。但仍然不能理解一些事情。我试着用Google进行深入的解释,但其中大多数只是给出了高层次的概述。以下是我的疑惑Websocket连接设置

根据我读,web套接字服务器(C#/ C++实现)的默认端口80。虽然我们可以使用任何端口中,优选的,我们使用端口80,因为我们赢了没有任何防火墙问题。如果是这样,我们应该如何在同一个端口(80)上运行Web服务器和Web套接字服务器?

2.让我们假设web套接字服务器在端口81上运行Web服务器,并在端口上运行80

  1. 因此,当浏览器发出的初始握手的HTTP请求(升级:的WebSocket) ,这个请求发送到81端口。对吗?如果是这样,这个请求(见下文)与HTTP协议没有任何关系。但我们仍然使用HTTP协议标头。为什么?

     GET /mychat HTTP/1.1 
         Host: server.example.com 
         Upgrade: websocket 
         Connection: Upgrade 
         Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== 
         Sec-WebSocket-Protocol: chat 
         Sec-WebSocket-Version: 13 
         Origin: http://example.com 
    
  2. 为什么力,他们使用目前大多数浏览器发出直接的TCP /与给定的端口IP连接实现了相同的WebSocket的接口,无需任何HTTP的东西?

3.是否有任何数据包的大小限制或数据/缓冲器限制发送数据/从客户端/服务器接收到?如果是这种情况,我们是否需要构建数据并自行处理?

4. websocket服务器是否总是需要单独的服务/进程?将来,Web服务器(IIS,apache)将包括对在其进程空间内托管Web套接字服务器的支持吗?

+0

真的很好的问题! – GameScripting 2012-08-01 17:48:54

+1

我记得在某个地方看到下一版本的Windows Server将支持IIS下的网络套接字。由于http.sys的实现,Windows 2008无法支持WebSockets。如果我找到参考,我会放在回答 – JoshBerke 2012-08-01 17:50:51

回答

3
  1. 通过使用HTTP兼容的握手,你可以一个WebSocket的处理程序集成到您的网络服务器或只是有网络服务器提出了WebSocket连接到专用的WebSocket服务器。

  2. WebSocket握手使用HTTP兼容握手来允许在同一端口上轻松处理两个协议,并且它允许现有的防火墙配置更容易地支持WebSocket流量。此外,在HTTP请求的上下文中很好理解防止跨端脚本攻击,所以WebSocket利用了这些知识。即使在建立连接之后,WebSocket也不是原始套接字连接的。这是一个基于消息的协议,因此需要组帧。另外,从客户端(浏览器)发送到服务器时,为了减轻对代理/缓存/中介行为不当的理论漏洞的担忧,框架被屏蔽。

  3. 协议本身的消息大小没有限制。一条消息可以分成多个帧。帧大小有一个协议限制,但是它是2^64字节。根据客户端/服务器的实现,实际的帧大小限制将会更小。如果您想要发送多兆字节的单条消息,则可以考虑将应用程序更改为使用较小的消息来最大化跨浏览器和跨服务器支持。

  4. WebSocket处理可以明确地集成到Web服务器中,这是工作组设想的一种场景。例如,考虑pywebsocket,它可以在Apache中独立运行或作为mod_python模块运行。又如,ASP.NET 4.5 and IIS 8 will have built-in support for WebSockets

+0

我想,转发WebSocket连接的网络服务器尚不实用。 – SysAdmin 2012-08-02 08:45:31

+0

@SysAdmin你的意思是你不实际吗?很多人都成功地做到了这一点。快速搜索给了我这些:http://serverfault.com/questions/290121/configuring-apache2-to-proxy-websocket,http://stackoverflow.com/questions/2419346/can-nginx-be-used-as -a-reverse-proxy-for-a-backend-websocket-server,http://www.letseehere.com/reverse-proxy-web-sockets – kanaka 2012-08-02 15:13:50