第11篇 防火墙穿越及信令及php表单必需字段
来源:互联网 发布:单片机液晶数字钟论文 编辑:程序博客网 时间:2024/05/22 07:57
关键词:NAT/防火墙穿越,聊天室中的信令,php表单中的必需字段
一、WebRTC一对一
1.1 通过ICE框架建立NAT/防火墙穿越的连接
这个网络地址应该是能从外界直接访问,WebRTC使用ICE框架来获得这个地址。RTCPeerConnection在创立的时候可以将ICE服务器的地址传递进去,如:
注:当然这个地址也需要交换,还是以甲乙两位为例,交换的流程如下(RTCPeerConnection简称PC):
a)甲、乙各创建配置了ICE服务器的PC实例,并为其添加onicecandidate事件回调
b)当网络候选可用时,将会调用onicecandidate函数
c)在回调函数内部,甲或乙将网络候选的消息封装在ICE Candidate信令中,通过服务器中转,传递给对方
d)甲或乙接收到对方通过服务器中转所发送过来ICE Candidate信令时,将其解析并获得网络候选,将其通过PC实例的addIceCandidate()方法加入到PC实例中。
这样连接就创立完成了,可以向RTCPeerConnection中通过addStream()加入流来传输媒体流数据。将流加入到RTCPeerConnection实例中后,对方就可以通过onaddstream所绑定的回调函数监听到了。调用addStream()可以在连接完成之前,在连接建立之后,对方一样能监听到媒体流。
1.2 聊天室中的信令
上面是两个用户之间的信令交换流程,但我们需要建立一个多用户在线视频聊天的聊天室。所以需要进行一些扩展,来达到这个要求
1.2.1用户操作
首先需要确定一个用户在聊天室中的操作大致流程:
a.打开页面连接到服务器上
b.进入聊天室
c.与其他所有已在聊天室的用户建立点对点的连接,并输出在页面上
d.若有聊天室内的其他用户离开,应得到通知,关闭与其的连接并移除其在页面中的输出
e.若又有其他用户加入,应得到通知,建立于新加入用户的连接,并输出在页面上
f.离开页面,关闭所有连接
从上面可以看出来,除了点对点连接的建立,还需要服务器至少做如下几件事:
a.新用户加入房间时,发送新用户的信息给房间内的其他用户
b.新用户加入房间时,发送房间内的其他用户信息给新加入房间的用户
c.用户离开房间时,发送离开用户的信息给房间内的其他用户
1.2.2实现思路
以使用WebSocket为例,上面用户操作的流程可以进行以下修改:
a.浏览器与服务器建立WebSocket连接
b.发送一个加入聊天室的信令(join),信令中需要包含用户所进入的聊天室名称
c.服务器根据用户所加入的房间,发送一个其他用户信令(peers),信令中包含聊天室中其他用户的信息,浏览器根据信息来逐个构建与其他用户的点对点连接
d.若有用户离开,服务器发送一个用户离开信令(remove_peer),信令中包含离开的用户的信息,浏览器根据信息关闭与离开用户的信息,并作相应的清除操作
e.若有新用户加入,服务器发送一个用户加入信令(new_peer),信令中包含新加入的用户的信息,浏览器根据信息来建立与这个新用户的点对点连接
f.用户离开页面,关闭WebSocket连接
1.2.3服务器实现
由于用户可以只是建立连接,可能还没有进入具体房间,所以首先我们需要一个容器来保存所有用户的连接,同时监听用户是否与服务器建立了WebSocket的连接,程序代码如下:
var server = newWebSocketServer();
var sockets = [];
server.on(‘connection’,function(socket){
socket.on(‘close’,function(){
var i = sockets.indexOf(socket);
sockets.splice(i,1);
//关闭连接后的其他操作
}
sockets.push(socket);
//连接建立后的其他操作
});
由于有房间的划分,所以我们需要在服务器上建立一个容器,用来保存房间内的用户信息。显然对象较为合适,键为房间名称,值为用户信息列表。
同时我们需要监听上面所说的用户加入房间的信令(join),新用户加入之后需要向新用户发送房间内其他用户信息(peers)和向房间内其他用户发送新信息(new_peer),以及用户离开时间向其他用户发送离开用户的信息(remove_peer),根据这个思路,代码如下:
最后再加上点对点的信令转发就行了。
参考资料:
WebRTC in the realworld: STUN, TURN and signaling
SDP for the WebRTC draft-nandakumar-rtcweb-sdp-04
http://lingyu.wang/#/post/2014/3/18/webRTC-2
二、php
2.1 表单中的必需字段
在表单中,有些信息是必填的,要对这些字段进行验证,以免用户不输入,看个例子:
运行结果为:
注:这里面提到一个函数如下:
function test_input($data){
$data= trim($data);
$data= stripslashes($data);
$data= htmlspecialchars($data);
return$data;
}
它是防注入用的。其中
trim函数的作用是移除字符串两侧的空白字符或其他预定义字符。
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
htmlspecialchars()函数把预定义的字符转换为 HTML 实体。
2016年11月24日星期四
- 第11篇 防火墙穿越及信令及php表单必需字段
- 如何设置表单必需字段及错误信息
- 第9篇WebRTC-IOS之服务器及信令及信令交换以及会话描述协议
- 第10篇 WebRTC-IOS之信令与RTCPeerConnection建立及SDP描述符 周三
- H.460.18介绍: H.323信令穿越NAT和防火墙
- windows2003 IIS6.0 web服务器配置及穿越防火墙
- jmx rmi 穿越防火墙问题及jmxmp的替代方案
- jmx rmi 穿越防火墙问题及jmxmp的替代方案
- VOIP NAT穿越之SIP信令穿越
- VOIP NAT穿越之SIP信令穿越
- SIP注册信令消息示范及解释
- NAT类型及穿越
- NAT及NAT穿越
- Internet上点对点通讯和穿越各类防火墙及网关实现的几点可行性分析
- 关于丢失主叫丢失CONNECT信令或被叫丢失CONNECT ACK信令导致掉话及未接通
- 第72篇webrtc一对一及php及JS
- PHP过滤表单字段
- PHP 判断来路及提交表单
- 20161124
- 常用开发工具镜像,不用翻墙,即可下载Chrome Android Studio Gradle Golang NDK SDK NodeJS
- F - 平方和与立方和
- H264中提取sps和pps
- 网易面试题之小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹
- 第11篇 防火墙穿越及信令及php表单必需字段
- Xutils3.0框架的初始体验二
- android---- 引入本地aar 包 failed to resolve:xxx
- Codeforces Round #381 (Div. 2) A. Alyona and flowers
- 《Python简易教程》读书笔记
- printk打印级别输出
- 《Linux内核的设计与实现》读书笔记(二)---从内核出发
- java的基本数据类型
- 图片拉伸的处理的三种方式