博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
peerconnection_server简单分析
阅读量:2193 次
发布时间:2019-05-02

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

ListeningSocket listener; //ListeningSocket继承了SocketBase基类	listener.Create()		socket(()	listener.Listen(FLAG_port)		setsockopt()		bind()		listen()		PeerChannel clients;		//typedef std::vector
Members; //connected() //id() //set_disconnected() //is_wait_request() //name() //TimedOut() //GetPeerIdHeader() //NotifyOfOtherMember() //GetEntry() //ForwardRequestToPeer() //OnClosing() //QueueResponse() //SetWaitingSocket() /*struct QueuedResponse { std::string status, content_type, extra_headers, data; };*/ //members() //IsPeerConnection() //Lookup() //IsTargetedRequest() //AddMember() //CloseAll() //OnClosing() //CheckForTimeout() //DeleteAll() //BroadcastChangedState() //HandleDeliveryFailures() //BuildResponseForNewMember() typedef std::vector
SocketArray; SocketArray sockets; while (!quit) select() if(FD_ISSET(s->socket(), &socket_set)) OnDataAvailable() //接收到有效数据 recv() headers_received() ParseHeaders() ChannelMember* member = clients.Lookup(s); //查找client是否存在,返回查找结果。 if (member || PeerChannel::IsPeerConnection(s)) if (!member) //如:http://192.168.1.123:8888/sign_in?id_name if (s->PathEquals("/sign_in")) clients.AddMember(s); else if (member->is_wait_request(s)) socket_done = false; else //如:http://192.168.1.123:8888/message?peer_id=1&to=2 ChannelMember* target = clients.IsTargetedRequest(s); if (target) member->ForwardRequestToPeer(s, target);//peer数据的转发请求 std::string extra_headers(GetPeerIdHeader()); if (peer == this) ds->Send("200 OK", true, ds->content_type(), extra_headers, ds->data()); else peer->QueueResponse("200 OK", ds->content_type(), extra_headers, ds->data()); ds->Send("200 OK", true, "text/plain", "", ""); else if (s->PathEquals("/sign_out")) s->Send("200 OK", true, "text/plain", "", ""); else s->Send("500 Error", true, "text/plain", "", "Peer most likely gone."); else HandleBrowserRequest(s, &quit);//浏览器请求视频这部分代码并没有实现的 ...... clients.CheckForTimeout(); if (FD_ISSET(listener.socket(), &socket_set)) DataSocket* s = listener.Accept(); accept() sockets.push_back(s); 总结:对应peerconnection_server而言,整个框架可以看出其实就是一个简单的tcp_server;它实现了部分http协议,tcp_client管理,tcp_client之间的数据转发功能。

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

你可能感兴趣的文章
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>