csdn lidp http://blog.csdn.net/perfectpdl
上一篇文章介绍了 websocket理论,本篇分析websocket协议客户端部分在webkit浏览器引擎上的实现。
websocket api 可以看这里, 协议可以看这里RFC 6455.
webkit上websocket实现代码在WebCore/websockets目录下
一下为webkit WebSocket JavaScript idl 接口的定义(websocket.idl):
module websockets {
interface [
Conditional=WEB_SOCKETS,
CustomConstructor,
EventTarget,
NoStaticTables
] WebSocket {
readonly attribute DOMString URL;
// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
// networking
attribute EventListener onopen;
attribute EventListener onmessage;
attribute EventListener onclose;
[Custom] boolean send(in DOMString data)
raises(DOMException);
void close();
// EventTarget interface
[Custom] void addEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
[Custom] void removeEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
boolean dispatchEvent(in Event evt)
raises(EventException);
};
}
其中 URL 属性代表 WebSocket 服务器的网络地址,协议通常是”ws”,send 方法就是发送数据到服务器端,close 方法就是关闭连接。除了这些方法,还有一些很重要的事件:onopen,onmessage,onerror 以及 onclose。
浏览器提供的js接口给web开发人员使用,下面面为客户端建立
WebSocket 连接的实例 JavaScript 代码
var wsServer = 'ws://localhost:8888/Demo';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) { onOpen(evt) };
websocket.onclose = function (evt) { onClose(evt) };
websocket.onmessage = function (evt) { onMessage(evt) };
websocket.onerror = function (evt) { onError(evt) };
function onOpen(evt) {
console.log("Connected to WebSocket server.");
}
function onClose(evt) {
console.log("Disconnected");
}
function onMessage(evt) {
console.log('Retrieved data from server: ' + evt.data);
}
function onError(evt) {
console.log('Error occured: ' + evt.data);
}
上面 javascript 代码 为客户端发起请求流程,首先是 创建WebSocket对象,指定服务器端url. 这里创建时即发起tcp请求给服务器,所以创建的过程相对来讲是个堵塞动作,webkit 内部实现在V8WebsocketCustom.cpp中,constructorCallback 函数为构造函数入口,解析url及protocol后 调用websocket类的connect 函数发起tcp请求 webSocket->connect(url, toWebCoreString(protocol), ec); void WebSocket::connect(const String& url, const Vector<String>& protocols, ExceptionCode& ec)(websocket.cpp) 函数首先会做一些语法检测,比如协议是否为ws或wss(安全的ws), 然后建立 WebSocketChannel,建议一个websocoket通道代表此连接实例(WebSocketChannel.cpp), 最后调用 ~WebSocketChannel 提供的connect 函数内部先创建握手对象WebSocketHandshake用于保存握手信息,didCreateWebSocket -> didCreateWebSocketImpl发起tcp请求。 客户端在构造完websocket对象时已经发起连接请求,然后 指定服务器端事件回调,比如onopen 事件表示连接建立完成,onmessage标识服务器有消息发送。 想了解更多websocket 可以访 问这里
|
分享到:
相关推荐
《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少...
资源名称:HTML5 WebSocket权威指南内容简介:《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择...
HTML5 websocket 聊天 java tomcat8
《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少...
构建实时Web应用:基于HTML5 WebSocket、PHP和jQuery(英文版) Realtime Web Apps: With HTML5 WebSocket, PHP, and jQuery
html5 websocket聊天程序
jetty html5 websocket服务器
WebSocket 领域最全面和系统的著作、三位资深html5技术专家共同编写;系统讲解 websocket 的API、协议、消息传输安全性和企业部署,并给出通过websocket协议通信的真实示例,可操作性强。
html5 websocket 建立连接通讯
html5 websocket+nodejs测试代码 iostat压缩包.
界面是HTML5 ,自动连接websocket服务器端,连接成功提示。断线提示,并且自动重连。自动检测状态。
本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的强大和易用
本工程为MyEclipse javaWeb工程,用于展示如何使用 HTML5 webSocket API实现即时通讯的功能。 本工程编码方式:UTF-8 功能说明: 1、本功能支持多人聊天,类似于http://www.htkaoyan.com/网站中的在线自询; 2、...
HTML5 WebSocket权威指南(带标签) ;完整版并且带标签目录
资源名称:使用 HTML5 WebSocket 构建实时Web应用内容简介: 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的...
The Definitive Guide to HTML5 WebSocket WebSocket权威著作,英文版,推荐下载!