看下websocket调用过程:
基本定义参考上一篇:
Chromium 中HTML5 WebSocket收发消息分析c++(一)-CSDN博客
一、前端测试用例
参考:HTML5 WebSocket | 菜鸟教程 (runoob.com)
websocket.html文件如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>WebSocket 测试页面</title>
<script type="text/javascript">
function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("您的浏览器支持 WebSocket!");
// 打开一个 web socket
var ws = new window.WebSocket("ws://localhost:9998/echo");
ws.onopen = function()
{
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("发送数据");
alert("数据发送中...");
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("数据已接收...");
};
ws.onclose = function()
{
// 关闭 websocket
alert("连接已关闭...");
};
}
else
{
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
}
</script>
</head>
<body>
<div id="sse">
<a href="javascript:WebSocketTest()">运行 WebSocket</a>
</div>
</body>
</html>
二、webscoket服务端搭建:
参考:HTML5 WebSocket | 菜鸟教程 (runoob.com)
三、启动浏览器打开websocket.html页面:
1、net进程ID=17324
2、webscoket测试页面进程ID=17796
四、附加上net ID=17324和 render ID=17796 进程开始调式。
1、点击页面“运行 WebSocket”按钮【render进程ID=17796 】
2、在【render进程ID=17796 】
1)、开始构建websocket对象out\Debug\gen\third_party\blink\renderer\bindings\modules\v8\v8_websocket.cc
void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_DOMWebSocket_constructor");
BLINK_BINDINGS_TRACE_EVENT("WebSocket.constructor");
...........
}
2)、发送mojom消息NetworkContextProxy::CreateWebSocket给net进程【net ID=17324】
通知构建websocket对象:
3)、net进程【net ID=17324】收到NetworkContextProxy::CreateWebSocket
开始构造:WebSocket::WebSocket()对象【services\network\websocket.cc】
4)、至此window.websocket对象构建完毕。
5)、前端运行 ws.send("发送数据"); 给 render进程ID=17796
6)、render进程ID=17796 收到前端函数ws.send("发送数据")调用
在DOMWebSocket::send中响应:
7)、DOMWebSocket::send调用 WebSocketProxy::SendMessage通知net进程【net ID=17324】发送消息。
8)、net进程收到impl->SendMessage消息开始响应【net ID=17324】
9)、net进程【net ID=17324】开始接收服务端响应数据WebSocket::WebSocketEventHandler::OnDataFrame
发送mojom消息:OnDataFrame 给render进程【ID=17796 】
10)、render进程【ID=17796 】收到OnDataFrame mojom消息之后在 WebSocketChannelImpl::OnDataFrame里面处理。
11)、WebSocketChannelImpl::OnDataFrame之后将数据返回给前端:
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("数据已接收...");
};