博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebKit之WebSocket模块的代码层初步分析
阅读量:4026 次
发布时间:2019-05-24

本文共 3100 字,大约阅读时间需要 10 分钟。

## WebSocket的js代码

var socket = new WebSocket('ws://localhost:8080');socket.onopen = function(event) { 	socket.send('I am the client and I\'m listening!');}socket.onmessage = function(event){ 	console.log('Client received a message',event);}socket.onclose = function(event){	console.log('Client notified socket has closed',event);	//socket.close()}
## WebCore中WebSocket模块实现核心代码

## WebSocket的构造函数WebSocket::WebSocket(ScriptExecutionContext* context):ActiveDOMObject(context){	...}## 统一的create接口PassRefPtr
WebSocket::create(ScriptExecutionContext* context){ RefPtr
webSocket(adoptRef(new WebSocket(context))); webSocket->suspendIfNeeded(); return webSocket.release();}## ws.connect("ws://192.168.2.99:8080/")void WebSocket::connect(const String& url, const Vector
& protocols, ExceptionCode& ec){}## 获取执行上下文ScriptExecutionContext* WebSocket::scriptExecutionContext() const{ return ActiveDOMObject::scriptExecutionContext();}## 销毁上下文void WebSocket::contextDestroyed(){ ActiveDOMObject::contextDestroyed();}## 暂停与挂起void WebSocket::suspend(ReasonForSuspension){ if (m_channel) m_channel->suspend();}
 
## 恢复通信void WebSocket::resume(){	m_channel->resume();}
void WebSocket::stop(){	m_channel->disconnect();	ActiveDOMObject::stop();}## 连接上事件void WebSocket::didConnect(){	dispatchEvent(Event::create(eventNames().openEvent, false, false));}void WebSocket::didReceiveMessage(const String& msg){	dispatchEvent(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toString()));}
void WebSocket::didReceiveBinaryData(PassOwnPtr
> binaryData){ dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data(), binaryData->size()), SecurityOrigin::create(m_url)->toString())); //RefPtr
blob = Blob::create(blobData.release(), size); //dispatchEvent(MessageEvent::create(blob.release(), SecurityOrigin::create(m_url)->toString()));}void WebSocket::didReceiveMessageError(){ dispatchEvent(Event::create(eventNames().errorEvent, false, false));}void WebSocket::didClose(unsigned long unhandledBufferedAmount, ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String& reason){ RefPtr
event = CloseEvent::create(wasClean, code, reason); dispatchEvent(event); ... m_channel->disconnect(); ... ActiveDOMObject::unsetPendingActivity(this);}## 事件时机修改状态void WebSocket::didUpdateBufferedAmount(unsigned long bufferedAmount) //m_bufferedAmount = bufferedAmount;void WebSocket::didStartClosingHandshake() //m_state = CLOSING;## close时机void WebSocket::close(int code, const String& reason, ExceptionCode& ec){ m_channel->close(code, reason);}## 发送Message//void WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec)//void WebSocket::send(ArrayBufferView* arrayBufferView, ExceptionCode& ec) //适配转换void WebSocket::send(Blob* binaryData, ExceptionCode& ec){ m_channel->send(*binaryData);}## 连接servervoid WebSocket::connect(const String& url, const Vector
& protocols, ExceptionCode& ec){ m_channel->connect(m_url, protocolString); ActiveDOMObject::setPendingActivity(this);}

转载地址:http://mbvbi.baihongyu.com/

你可能感兴趣的文章
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
网页设计里的浮动 属性
查看>>
Maximum Subsequence Sum
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
Django 的Error: [Errno 10013]错误
查看>>
机器学习实战之决策树(一)
查看>>
[LeetCode By Python] 2 Add Two Number
查看>>
python 中的 if __name__=='__main__' 作用
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]9. Palindrome Number
查看>>