一、WebRTC研究
1.1 呼叫挂断
用户只有挂断了,还可以呼叫别的用户(类似打电话)。
1.2 完成信令服务器
信令服务器不加SSL的话是不安全的,WebSocket协议支持SSL,类似HTTP支持HTTPS。你可以在连接到服务器时,通过简单地使用wss://来开启这个功能。
1.3 WebSockets
WebSockets的好处是它为浏览器带来了双向通信。WebSockets的几个困境:
a.网络防火墙
在理想情况下,WebSockets是可靠的,但在代理设置的情况下,会变得不稳定,比方说虚拟专用网络(VPN)的额外开销或复杂的防火墙可导致连接的成功率急剧下降。
b.WebSockets信令服务器
在面对一个真实的网络环境时,使用WebSockets做信令服务器会有停顿,所以,因网络问题不得不做备选方案。
1.4 XMPP
XMPP是一个即时通信协议,它的目标是实现即时通信、用户在线和通讯录。
1.5 SIP
SIP:会话初始协议,它是一个致力于移动网络和电话系统的信令协议。
1.6 offer
在信令中,操作的顺序是offer,answer,然后互相发送候选直到连接成功。
二、把客户端连接到一起
2.1 客户端应用
客户端应用的目标是让不同地方的用户互相连接并进行通信。
2.2 获取一个连接
首先要做的是与信令服务器之间创建连接。
2.3登陆到应用程序
使用唯一的用户名登陆是与服务器的首次交互行为。它用来识别我们的身份,同时给别的用户一个唯一的标识来呼叫我们。
2.4 开始一个对等连接
首先要startCollection,因为startCollection方法是任何WebRTC连接的第一步。接下来:
a.从相机中获取视频流
b.验证用户的浏览器是否支持WebRTC
c.创建RTCPeerConnection对象
2.5 发起通话
我们可以和远程用户发起通话。首先发送offer给另一个用户来开始整个过程,一旦用户得到这个offer,他将创建一个响应并开始交换ICE候选,直到成功连接到服务器。
2.6 检测通信
调试实时应用是非常困难的。建议用chrome检查网络通信。
2.7 挂断电话
通信结束要挂断电话,挂断电话时要通知其他用户,我们试图关闭通信。当触发挂断事件时,首先需要通知服务器我们不再进行通信。接着,需要告诉RTCPeerCollection进行关闭,这将停止发送数据流给其他用户。最后,再次设置连接,把连接实例设置为打开状态,以便我们接受新的通话。
三、使用WebRTC发送数据
3.1任意数据
WebRTC擅长进行数据传输,不仅仅是音频和视频流,还包括我们希望的任意数据类型。
3.2流控制传输协议和数据传输
目前传输常用的是TCP连接,即使用如AJAX和WebSockets技术将数据发送到服务端,并在另一端接收。WebRTC对等连接中使用流控制传输协议(SCTP)作为数据传输的方式。
SCTP位于数据传输层安全协议(DTLS)之上,每个WebRTC连接都实现了它并且为数据传输提供出口绑定到数据通道上。所有这些都位于UDP之上,它为WebRTC数据提供基本的传输方法。协议顺序如下:
SCTP特点如下:
a. 传输层的安全性,基于DTLS。
b. 传输层可以运行在可靠的或不可靠的模式中。
c. 传输层可以担保或者无担保数据包顺序。
d. 数据是面向消息进行传播的,允许消息分解传输,在接收端重组。
e. 传输层支持流量和阻塞协议。
注:SCTP解决了TCP的一些问题,同时利用了UDP的传输能力。
3.3RTCDataChannel对象
数据通道会存在于以下几种状态中:
连接中:这是默认状态,当数据通道等待一个连接。
开启:这种状态下,连接已经被建立,可以进行通信。
关闭中:通道正在被销毁。
关闭:这种状态下,通道关闭,无法进行通信。
3.4数据通道选项
选项由以下几部分组成:
reliable:设置消息传递是否进行担保。
ordered:用来设置消息的接受是否需要按照发送时的顺序。
maxRetransmitTime:设置消息发送失败时,多久重新发送。
protocol:设置强制使用其他子协议,但当用户代理不支持该协议时会报错。
negotiated:此选项用来设置开发人员是否有责任在两边创建数据通道,还是浏览器来自动完成这个步骤。
id:这个用来设置通道的唯一标识,可以在多通道时进行区分。
注:以上主要使用的配置项是reliable和ordered,当设置为true时数据通道表现更像TCP,设置为false时,表现更像UDP。
3.5发送数据
发送数据包,目前常用的数据通道的类型如下:
String:JavaScript基本的字符串。
Blob:一种文件格式的原始数据。
ArrayBuffer:确定数组长度的数据类型。
ArrayBufferView:基础的数据视图。
3.6加密与安全
加密技术在对等应用中应满足以下要求:
信息在传输过程中被窃取,无法进行读取。
第三方不能够伪造消息,使消息看上去像是接收者发送的。
消息在传输给另一方时不能进行编辑。
加密算法的快速性,以支持客户端之间的最大带宽。
四、bug处理
4.1websocket中的ws库bug
WebSocket connection to ‘ws://localhost:8888/’failed:
wscat不是内部命令或外部命令,也不是可运行的程序或批处理文件。
解决方案:说明没安装wscat插件,安装命令如下:
npm install -g wscat
再次运行:wscat –c ws://localhost:8888/ 就可以了。
4.2 WebSocket
WebSocketprotocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
在 WebSocketAPI,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
五、点阵笔对接一对一
这个目前需要一个插件对接一对一,会C++才行。
六、PHP
6.1 PHP的另一种标记方式
常用:<?php ?>
不常用: <script language=“php”> </script>
6.2 html中字滚动效果
代码:
6.3 php控制html
代码如下:
效果如下:
注释掉:$hdw=111;效果如下:
由此可知:php能控制html。
2016年9月22日星期四