第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日星期四

1 0