分享一篇自己写的关于 ajax 长连接的文章

2015-01-08 12:46:31 +08:00
 lerry
有误之处,还望指正~

http://lerry.me/post/2015/01/08/jquery-implementation-long-polling
4957 次点击
所在节点    分享创造
11 条回复
xinyu198736
2015-01-08 13:23:37 +08:00
概念有些混淆
typcn
2015-01-08 13:28:49 +08:00
不就是 socket.io ,连接 websocket 失败的时候自动降级的那个吗。。。

现成全自动的,不用造轮子。。
airyland
2015-01-08 13:33:19 +08:00
这叫轮循,不叫长连接吧。websocket才叫长连接。
xinyu198736
2015-01-08 15:56:30 +08:00
@airyland 长连接是 long polling ,跟socket不是一个概念,另外楼主这个只能叫做“超时连接”,跟long polling还沾不上太大的边。
meeasyhappy
2015-01-08 16:04:48 +08:00
给你赞一个
jc4myself
2015-01-09 00:47:18 +08:00
ajax更多是异步的,异步就不会使用长链接
lerry
2015-01-09 09:58:06 +08:00
@xinyu198736
@typcn
@airyland
@jc4myself

感谢指教~
我写的是关于long polling,字面上看叫长轮询更恰当一些,

我理解的
轮询,定时向服务器请求,服务器立即响应,
长连接/轮询,服务器收到请求后,挂起,直到有新消息才返回, 但是为了连接的维持,设置了超时时间,同时服务器会在一定时间内返回

可以看这里
http://stackoverflow.com/questions/14903223/why-setting-a-client-side-timeout-when-using-long-polling

求教 @zythum
hitsmaxft
2015-01-09 10:05:29 +08:00
@jc4myself 错 异步又不影响网络请求模式
zythum
2015-01-09 11:48:18 +08:00
我说下我的理解。可能也不是很正确。

长链接的链接一般是不中断的。使用http协议的Transfer-Encoding:chunked方式输出。一般实现是使用一个iframe发起请求(XMLHttpResquest貌似没发使用chunked)。然后通过脚本<script>parent.xxxxxxxx</script> 来处理,还是直接用iframe作为显示就随便。

长轮训一般使用XMLHttpResquest, 处理是发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求...

特点是长链接的链接只有一个。长轮训的链接有多个。对于实时性来说。长链接更好。

轮询,就是 setInterval(sendRequest, 500)。 定时请求一下就好了。

以上都是基于http协议而言的。websocket不是http协议。是一个同样是tcp的协议。websocket和http起的服务时不一样的。

@airyland 一般来说。长轮训,长连接是特指上面的两种实现方式。如果从原理来说。即保持一个链接不中断。那么websocket也是这样的。

@typcn 这个方式很早就有了。互联网刚开始都是在线聊天室的时候都是这样处理的。

@jc4myself 异步不一定只是XMLHttpResquest. Ajax不单是XMLHttpResquest

字写太多了。估计有错别字。求谅解。
zythum
2015-01-09 11:56:18 +08:00
还有一个需要说的是websocket是双工的。可以通过同一个链接上行下传。 长连接单工的。只能实现服务端下传。
tamamaxox
2015-01-09 22:30:31 +08:00
不如先看看meteor的方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/160278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX