传说,这里有高手(不懂就问,无论何时)

snailrain 2009-01-24 07:32:03
最近学习Server push,
其中有一个基于长链接的实现方式(不是Socket)。
不禁有个疑惑:
Http请求都是通过Web端口通信。
但是,如果使用长链接——保持一个链接不断开。
那样不是一直占用端口,其他用户不能再使用了?

恭请讲解。
...全文
281 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuan.ye 2009-01-28
  • 打赏
  • 举报
回复
不明白
huxuanhui 2009-01-25
  • 打赏
  • 举报
回复
学习 学习
mark
chagel 2009-01-25
  • 打赏
  • 举报
回复
不客气,以后有什么问题能帮上忙的,尽管来 程序员专业问答社区 :-)
snailrain 2009-01-25
  • 打赏
  • 举报
回复
恩,你说的我都清楚了。
就是不太清楚:
“HTTP协议恰恰允许创建最多两个链接。”
也就是,服务器在一个通道(不是端口)中是如何区分这两个连接的。
因为,它们的“服务器/客户端地址+服务器/客户端端口”这些元素都一样。

既然,你也不太清楚,那我得去找找资料。

非常感谢你的讲解。
Thanks
chagel 2009-01-25
  • 打赏
  • 举报
回复
没有说web服务端和同一客户端,不能创建一个以上的链接,HTTP协议恰恰允许创建最多两个链接。

至于它怎么实现的,偶不太清楚。

你说的长连接,短链接都是HTTP应用协议上的链接,本身是通过keep-alive或closed(1.0默认)来支持的。
当你建立第二个链接的时候,请求没有问题,但是如果尝试第三次请求就会有问题了。

你可以把ip地址理解成公司的总机号码,每个应用程序或者进程理解成每个员工,而端口号就是他们的分机号码。
qq196260188 2009-01-25
  • 打赏
  • 举报
回复
web的无刷新,,我还是用iframe,还是ajax吧
snailrain 2009-01-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chagel 的回复:]
.net的socket对访问tcp/ip协议做了很好的api封装,走的还是tcp/udp传输层,当然也符合五元组的基本约定。
[/Quote]
既然,符合那几个元素的基本约定。
为什么,不跟HTTP一样。与客户端通信,使用同一端口。
而是,给每个客户端分配一个通信端口?
snailrain 2009-01-24
  • 打赏
  • 举报
回复
我所说的“短连接”指的是:
与长连接相反的,也就是“正常”的请求/响应。
长连接,就是浏览器发送请求到服务器,服务器收到请求,并发送数据后,不断开连接。
将这个连接保持下去。
这个,我想你清楚了。
当已经与服务器建立长连接后,如果再发送一个“正常”的请求(指的就是我之前所说的‘短连接’),
那么这时,你所说的“服务器/客户端地址+服务器/客户端端口”这几个元素跟长连接是一样的。
所以,按道理来说,之前的长连接与服务器通信的通道,跟后来的一个请求的通信通道,也是一样的。
但是,长连接一直占用这个通道。


不过,我在相关资料中得到的信息是,长连接建立后,其他“正常”的请求一样可以通过。
不知,我理解的误区在哪里。
望,指教。
chagel 2009-01-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 snailrain 的回复:]
还有一个疑惑:
Socket的服务器与客户端通信时。
每个客户端会分配一个通信端口。
那么,这个端口是由哪些元素组成呢,
是否与TCP、UDP协议一样呢。
[/Quote]

.net的socket对访问tcp/ip协议做了很好的api封装,走的还是tcp/udp传输层,当然也符合五元组的基本约定。
chagel 2009-01-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 snailrain 的回复:]
但是,用户与服务器建立长连接之后,再要与服务器建立另一“短连接”时,是什么原因没有被占用的呢。
[/Quote]
事实上我只解释了什么是一个tcp链接而已,既然一个链接都算不上,“端口被占用”这种说法当然也不成立。
其次,针对这个问题,我想说的是,HTTP是允许创建最多两个链接的,而当前浏览器都有二个链接限制的体现。
比如:在同一服务器同时下载(HTTP)多个文件的经验,往往我们可以同时下载两个文件,但是第三个就一直在等待状态。
我想如果楼主搞server push的话,到时候一定会遇到这类问题吧。
snailrain 2009-01-24
  • 打赏
  • 举报
回复
还有一个疑惑:
Socket的服务器与客户端通信时。
每个客户端会分配一个通信端口。
那么,这个端口是由哪些元素组成呢,
是否与TCP、UDP协议一样呢。
snailrain 2009-01-24
  • 打赏
  • 举报
回复
感谢12楼解疑。
有恍然大悟的感觉。
但是,又有个疑问:
引:
一个TCP或UDP连接,是由协议(TCP、UDP等)+服务器/客户端地址+服务器/客户端端口这么5个元素组成。
这样解释了,使用长连接,其他用户也能够与服务器通信。
但是,用户与服务器建立长连接之后,再要与服务器建立另一“短连接”时,是什么原因没有被占用的呢。
chagel 2009-01-24
  • 打赏
  • 举报
回复
“那样不是一直占用端口,其他用户不能再使用了?”

楼主的疑问实质不是推技术,而是一个http或TCP/IP问题,偶不是网络专家,说点皮毛吧。
其实也就一句话,一个TCP或UDP连接,是由协议(TCP、UDP等)+服务器/客户端地址+服务器/客户端端口这么5个元素组成。

也就是说一个tcp端口可以有多个TCP连接的,并不是服务器端口被一个链接使用了,就不能被其他链接使用。
snailrain 2009-01-24
  • 打赏
  • 举报
回复
大家都回家过年唠嗑去了么?
咋没人回帖哟。
俺大年三十的,都回不了家呢。

伤心。
snailrain 2009-01-24
  • 打赏
  • 举报
回复
为什么一提到Server Push,就回贴的人很少很少呢。
Allen2064 2009-01-24
  • 打赏
  • 举报
回复
学习阶段。支持一下
snailrain 2009-01-24
  • 打赏
  • 举报
回复
To 7楼。
我也觉得Server push很怪呢。
是怎么被人研究出来的呢?
还一定数量的运用呢。
一品梅 2009-01-24
  • 打赏
  • 举报
回复
...
过年了,奇特怪想法也来了,虽然这种问题已经见过,哈哈.
snailrain 2009-01-24
  • 打赏
  • 举报
回复
源码我没有,Server push这方面的示例不太好找。
snailrain 2009-01-24
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
这里有基于长链接的Server push
加载更多回复(4)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧