`
tedeyang
  • 浏览: 328174 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

scoket和浏览器的连接限制

阅读更多
1,一个socket由两个端口唯一确定
昨天晚上天冷,就在床上看书。
因为对socket的理解比较含糊,所以决定有针对性的研究一下。

看到点有用的东西:
“socket连接由双方的端点来决定”
这话听来很拗口,还好下面作者写了解释,大致就是说:
一个socket是由一对计算机IP(在socket连接打开前还要区分网卡mac地址)加端口号来区分的
因此只要端口不同,那么在两台计算机间就可以存在多个socket连接。
它的原理是:每个socket发送的报文头部含有ip和port信息,接收方服务器的操作系统网络协议层会根据这些信息把TCP报文转发给相应的处理程序。(就像一个分流闸门,把水流根据来源导向到不同的水池)这些底层事情是由socket守护进程和TCP协议层来做的,作者还讲了了一堆c函数。

因此我们可以开多个mysql客户端,连接上同一个mysql服务器,因为客户端软件能自动使用不同的端口。

2,HTTP协议对并发的建议
然而有个特例要注意:HTTP协议中规定了一个特殊规则:浏览器对一个服务器(后来我google到,其实这个限制是精确到域名的)不能同时打开两个以上的端口(即连接)我估计这个规则应该是为了保护服务器不会被很容易被洪水攻击。主流浏览器都很乖,实现了这个规则。(我以前还没用FlashGet之前,发现用IE下载一个网站的文件,只能同时打开2个,第三个就需要等待,那时候不了解怎么回事,现在明白了)

我想了想,
这个规则其实会影响到很多东西:Ajax,下载,并发等等。为什么很多大网站要用专门的图片服务器?一部分原因我猜测就是为了用不同的子域名来绕开浏览器的限制,加快速度(另一部分原因当然是服务器性能了)。对它们来说,端口和域名都是重要资源。

这部分内容实际上解决了我对实现comet技术的一些疑问。现在清楚了。

3.相关技术资料
HTTP协议1.1中文版:
http://www.cnpaf.net/Class/HTTP/0772522080738754597.html
请查看8.1.4节最后的说明。

其中节选:
引用
使用持续连接的客户机应限制与某一服务器同时连接的个数。单用户客户机不应与任一服务器或代理服务器保持两个以上的连接。代理服务器与其它服务器或代理之间应维护2*N个连接,其中N是同时在线的用户数。设定这一规则是为了改进HTTP应答时间且避免拥塞。

规范中用的是“应该”这个字眼,HTTP无法从协议本身来限制连接。这个是取决于客户端和服务端的实现。

然后我找到微软的官方帮助
http://support.microsoft.com/kb/282402
http://support.microsoft.com/kb/282402/en-us
引用
如何将 Internet Explorer 配置为可以同时进行两个以上的下载会话
察看本文应用于的产品
文章编号 : 282402
最后修改 : 2006年1月23日
修订 : 3.2
重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要先进行备份,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 (http://support.microsoft.com/kb/256986/) Microsoft Windows 注册表说明
概要
本文介绍如何将 Internet Explorer 的下载会话数配置为大于两个。
更多信息
警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。
为符合目前的 Internet 标准(征求意见文档 2068),Internet Explorer 将并发下载会话限制为两个,再加上一个排队等候下载的会话。此配置是浏览器的功能。但是,随着连接速度的提高,以及 Internet 服务器所支持的总连接数的增加,两个连接的限制可能已经妨碍了人们的使用。要将允许的并发连接数增大到 10,请按照以下步骤操作:1. 启动注册表编辑器 (Regedt32.exe)。
2. 在注册表中找到下面的项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 
3. 在编辑菜单上,指向“新建”,单击 DWORD 值,然后添加以下注册表值:
数值名称:MaxConnectionsPer1_0Server
数值数据:10
基数:十进制

数值名称:MaxConnectionsPerServer
数值数据:10
基数:十进制

4. 退出注册表编辑器。
此方法仅供参考。将最大连接数更改为两个以上违反 Internet 标准;Microsoft 不建议在封闭网络之外使用此方法。

--------------------------------------------------------------------------------

这篇文章中的信息适用于:
• Microsoft Internet Explorer 5.5
• Microsoft Internet Explorer 5.01
• Microsoft Internet Explorer 5.0
• Microsoft Internet Explorer 6.0



5
1
分享到:
评论
4 楼 congdepeng 2010-02-02  
感谢HTTP 1.1的中文版译文链接,我收藏了
3 楼 tedeyang 2008-01-17  
引用
楼主,HTTP 1.1对仅维持一个连接的建议,应该是为了让后台系统能更容易跟踪用户状态,减少不断重复建立连接的开销,以及支持服务器端内容往浏览器推送的问题

HTTP1.1相对1.0增加了长连接,估计以后还要增加comet。(现在服务器软件都在寻找绕开的办法),1.1现在也落伍了,我觉得应该制定新版本协议。

你关于“跟踪用户状态”的说法倒是让我耳目一新,不过不太认同。

注:HTTP建议的连接数是小于等于2,不是1,可能是“两个以上”这样的说法引起你的误解了。
2 楼 tminglei 2008-01-16  
另外,感谢HTTP 1.1的中文版译文链接,我收藏了
1 楼 tminglei 2008-01-16  
楼主,HTTP 1.1对仅维持一个连接的建议,应该是为了让后台系统能更容易跟踪用户状态,减少不断重复建立连接的开销,以及支持服务器端内容往浏览器推送的问题。众所周知,HTTP 1.0是绝对没有状态的,这个特性让很多应用程序吃了不少苦头。

相关推荐

    socket服务器,client 浏览器访问

    总结来说,"socket服务器,client浏览器访问"涉及的是基于Socket的网络通信和WebSocket的使用。Socket提供了一种基本的通信机制,而WebSocket则是为了满足现代Web应用对低延迟、双向通信的需求而发展起来的先进技术...

    原生浏览器socket本地代理

    本地代理允许浏览器通过Socket连接到指定的服务器,而不是直接访问互联网。在Windows操作系统下,我们可以使用select模式来实现这个功能。 `select`模式是多路复用I/O的一种方式,尤其适用于网络编程。它允许程序...

    js+socket实现web通讯

    WebSocket是HTML5引入的一个新特性,允许服务器和浏览器之间建立长时间保持连接的通道,从而实现低延迟、高效率的数据交换。 **WebSocket基础** WebSocket协议定义了一种在单个TCP连接上进行全双工通信的协议。它...

    weapp.socket.io

    1. **初始化连接**:在微信小程序中启动Socket.IO连接,通常需要指定服务器地址和端口,以及可能的连接参数。 2. **事件监听与发送**:提供发送和接收数据的接口,如`emit`用于发送事件,`on`用于监听事件。这使得...

    SocketTest.rar

    考虑到网络延迟和带宽限制,开发者可能需要优化Socket通信,如使用缓冲区、合理的数据打包策略、心跳机制等。 总之,SocketTest.rar中的工具是为了帮助开发者更好地理解和测试Socket通信,这对于理解和优化网络...

    Socket Chat(采用.Net Socket技术的在线聊天室)

    6. **兼容性**:值得注意的是,Socket Chat依赖于ActiveX,这意味着它只能在安装了ActiveX支持的IE浏览器上运行,这限制了其在现代浏览器和非Windows平台的兼容性。 7. **资源优化**:由于采用了Socket直接通信,...

    socket-2.0.3资源包

    Socket.IO 是一个实时应用程序框架,它允许Web开发者创建实时、双向通信的应用,这些应用可以运行在各种浏览器和服务器上。这个“socket-2.0.3”资源包是Socket.IO库的一个版本,针对的是JavaScript环境,特别适用于...

    网络socket编程指南.pdf

    - **Socket调用**: 虽然可以使用`read()`和`write()`函数来操作Socket,但使用`send()`和`recv()`提供了更细粒度的控制,如指定消息长度、发送标志等。 #### 三、Socket的类型 ##### 1. Internet Socket(互联网...

    weapp.socket.io.js.zip

    Socket.IO 是一个流行的实时应用程序框架,它提供了一种简单的方式来处理浏览器和服务器之间的双向通信。然而,微信小程序并不直接支持原生的Socket.IO库,因为它的运行环境与常规的Web环境有所不同。因此,我们需要...

    Node.js-使用socket.ionode.js实现的一个简单的点对点以及点对多的聊天室

    而Socket.IO是一个为实时应用提供跨平台、跨浏览器的库,它在WebSocket的基础上进行扩展,解决了WebSocket的一些兼容性和连接问题,使得实时双向通信变得更加简单。 **Socket.IO的核心功能** 1. **实时性**:...

    WebSocket兼容到低版本浏览器

    1. Flash Socket:WebSocket SWF文件(如`WebSocket.swf`)利用Flash的Socket API在浏览器中创建WebSocket连接。这种方法需要用户有Flash插件,并且在服务器端提供相应的接口。`WebSocket.js`可能包含了处理Flash ...

    Linux网络编程-网络基础-socket编程-高并发服务器.pdf

    【Linux网络编程-网络...但受浏览器限制,性能和灵活性相对较低。 在实际开发中,根据应用需求和场景选择合适的模式,并结合网络编程技术,如socket、多线程、I/O复用等,可以构建高效、稳定、高并发的网络服务器。

    手机浏览器源码(j2me)

    在手机浏览器场景中,通常使用的配置和profile是CLDC(Connected Limited Device Configuration)和MIDP(Mobile Information Device Profile)。CLDC定义了基本的运行环境,而MIDP则添加了用户界面组件和网络访问...

    原创nio socket mina+javascript+flash实现commet长连接网页聊天室

    【标题】"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推...

    NodeJS+Express+socket_io 多人聊天简单Demo

    Socket.IO是一个实时应用框架,它在客户端和服务器之间建立了实时、双向通信的通道,通过WebSocket协议,并在不支持WebSocket的浏览器上回退到其他协议(如polling)。在多人聊天室中,socket.io负责实现实时通信,...

    silverlight+Socket

    2. **异步操作**:由于浏览器安全限制,Silverlight中的网络操作必须是异步的。因此,开发者通常会使用BeginConnect、BeginReceive和BeginSend等异步方法来启动连接和数据交换,以避免阻塞UI线程。 3. **数据编码与...

    java applect socket 聊天程序

    - Java中的Socket类代表TCP/IP协议的网络连接,它提供了输入流和输出流用于数据交换。 - `ServerSocket`类用于监听客户端的连接请求,通过`accept()`方法接收连接并返回一个新的Socket对象。 - `Socket`对象的`...

    socketio-terminal一个客户端服务器的node模块它就像SSH但通过socket.io通信

    为了保护数据和服务器资源,开发者应确保实现身份验证和授权机制,限制谁可以连接和执行命令。 9. **部署与集成**:将SocketIO-Terminal集成到现有的开发流程中,可以方便地进行远程调试、自动化任务和协作。部署时...

    java和as3 socket通信 解决安全沙箱问题

    然而,由于AS3运行在Flash Player的沙箱环境中,它受到一系列安全限制,包括不能直接与非同一域的服务器进行Socket连接。本篇文章将探讨如何解决AS3中的安全沙箱问题,以便与Java后台进行顺畅的Socket通信。 首先,...

Global site tag (gtag.js) - Google Analytics