欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Chromium 中HTML5 WebSocket实现分析c++(二)

Chromium 中HTML5 WebSocket实现分析c++(二)

2024/10/25 1:24:26 来源:https://blog.csdn.net/jangdong/article/details/142954166  浏览:    关键词:Chromium 中HTML5 WebSocket实现分析c++(二)

看下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 socketvar 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(){ // 关闭 websocketalert("连接已关闭..."); };}else{// 浏览器不支持 WebSocketalert("您的浏览器不支持 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("数据已接收...");
               };

总结:至此分析完毕:更多细节参考源码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com