ii熟悉Kafuka、Hadoop,p2p,Web-Service,并有创新性成果;
-1-1-1-1-1-1-1----------------------------------------------------------------1111111111111111111111111111
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
-1-1-1-1-1-1-1---------------------------------------------------------------11111111111111111111111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
大约在08年的时候,WG的工程师在讨论网络环境中需要一种全双工的连接形式,刚开始一直叫做「TCPConnection」,并讨论了这种协议需要支持的功能,大致已经和我们今天看到的WebSocket差不多了。他们认为基于现有的HTTP之上的一些技术(如长轮询、Comet)并满足不了这种需求,有必要定义一个全新的协议。
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
0000000000000000000000000000000000000000000000000000
基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。
一、什么是长连接、长轮询?
用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。
二、长连接、长轮询的应用场景
长连接、长轮询一般应用与WebIM、ChatRoom和一些需要及时交互的网站应用中。其真实案例有:WebQQ、Hi网页版、Facebook IM等。
如果你对服务器端的反向Ajax感兴趣,可以参考这篇文章 DWR 反向Ajax 服务器端推的方式:http://www.cnblogs.com/hoojo/category/276235.html
三、优缺点
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。
缺点:请求中有大半是无用,浪费带宽和服务器资源。
实例:适于小型应用。
长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:WebQQ、Hi网页版、Facebook IM。
长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销。
实例:Gmail聊天
Flash Socket:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的即时通信,而不是伪即时。
缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。
实例:网络互动游戏
0000000000000000000000000000000000000000000000000000
下边是在WHATWG文档中对WebSocket接口的定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
enum
BinaryType
{
"blob"
,
"arraybuffer"
}
;
[
Constructor
(
USVString
url
,
optional
(
DOMString
or
sequence
<
DOMString
>
)
protocols
=
[
]
)
,
Exposed
=
(
Window
,
Worker
)
]
interface
WebSocket
:
EventTarget
{
readonly
attribute
USVString
url
;
// ready state
const
unsigned
short
CONNECTING
=
0
;
const
unsigned
short
OPEN
=
1
;
const
unsigned
short
CLOSING
=
2
;
const
unsigned
short
CLOSED
=
3
;
readonly
attribute
unsigned
short
readyState
;
readonly
attribute
unsigned
long
long
bufferedAmount
;
// networking
attribute
EventHandler
onopen
;
attribute
EventHandler
onerror
;
attribute
EventHandler
onclose
;
readonly
attribute
DOMString
extensions
;
readonly
attribute
DOMString
protocol
;
void
close
(
[
Clamp
]
optional
unsigned
short
code
,
optional
USVString
reason
)
;
// messaging
attribute
EventHandler
onmessage
;
attribute
BinaryType
binaryType
;
void
send
(
USVString
data
)
;
void
send
(
Blob
data
)
;
void
send
(
ArrayBuffer
data
)
;
void
send
(
ArrayBufferView
data
)
;
}
;
|
内容的确定
大多数新技术的出现都是建立在已有技术的铺垫之上的,WebSocket内容的确定也是如此,其中就有Comet看不到的贡献,Comet是一个很有趣的技术,有兴趣可以看看这里
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/http://www.ibm.com/developerworks/cn/web/wa-lo-comet/