2020-08-01 14:29发布
求解答
1、WebSockets简介
要说最令人津津乐道的新浏览器API,就得数WebSockets了.WebSockets的目标是在一个单独的持久连接上提供全双工以及双向通信.在JavaScript中创建了WebSockets之后,会有一个HTTP请求发送到服务器以发起连接.在取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为WebSockets协议.也就是说,使用标准的HTTP服务器无法实现WebSockets,只有支持这种协议的专门服务器才能正常工作.
由于WebSockets使用了自定义的协议,所以URL模式也略有不同.未加密的连接不再是http://,而是ws://;加密的连接也不是https://,而是wss://.在使用WebSocketURL时,必须带着这个模式,因为将来还有可能支持其他模式.
使用自定义协议而非HTTP协议的好处是,能够在客户端和服务端之间发送少量的数据,而不必担心HTTP那样字节级的开销.由于传递的数据包很小,因此WebSockets非常使用移动应用.毕竟对移动应用而言,带宽和网络延迟都是关键问题.使用自定义协议的缺点在于,指定协议的时间比指定JavaScriptAPI的时间还长.WebSockets曾几度搁浅,就因为不断有人发现这个心协议存在一致性和安全性的问题.Firefox4和Opera11都曾默认启用WebSockets,但是在发布前夕有禁用掉了,因为有发现了安全隐患.目前支持WebSockets的浏览器有Firefox6+,Safari5+,Chrome和iOS4+版Safari.
WebSocket与TCP、HTTP的关系WebSocket与http协议一样都是基于TCP的,所以他们都是可靠的协议,Web开发者调用的WebSocket的send函数在browser的实现中最终都是通过TCP的系统接口进行传输的。
WebSocket和Http协议一样都属于应用层的协议,那么他们之间有没有什么关系呢?答案是肯定的,WebSocket在建立握手连接时,数据是通过http协议传输的,但是在建立连接之后,真正的数据传输阶段是不需要http协议参与的。
2、JavaScript中的websocket技术运用
在js文件当中运用websocket之前先检查当前浏览器是否支持websocket。固定下面代码:
//检查浏览器是否支持WebSocket
if(window.WebSocket){
console.log('ThisbrowsersupportsWebSocket');
}else{
console.log('ThisbrowserdoesnotsupportsWebSocket');
}
给一个websocket一般开发的时候会用的一些方法使用模板,代码来源:
https://www.cnblogs.com/tinywan/p/5894403.html
[removed]
varwsUri="ws://echo.websocket.org/";
varoutput;
functioninit(){
output=document.getElementById("output");
testWebSocket();
functiontestWebSocket(){
/**
*创建一个WebSocket对象
*url注意事项上面已经说过在此在提醒一下:
*参数是需要连接的服务器端的地址,同http协议使用http://开头一样
*WebSocket协议的URL使用ws://开头
*另外安全的WebSocket协议使用wss://开头。
*/
websocket=newWebSocket(wsUri);
*WebSocket对象一共支持四个消息onopen,onmessage,onclose和onerror
*我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,
*使得UI有更快的响应时间,得到更好的用户体验。
*当Browser和WebSocketServer连接成功后,会触发onopen消息;
websocket.onopen=function(evt){
onOpen(evt)
};
*当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。
websocket.onclose=function(evt){
onClose(evt)
*当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,
*参数evt中包含server传输过来的数据;
websocket.onmessage=function(evt){
onMessage(evt)
*如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;
websocket.onerror=function(evt){
onError(evt)
functiononOpen(evt){
writeToScreen("CONNECTED");
doSend("WebSocketrocks");
functiononClose(evt){
writeToScreen("DISCONNECTED");
functiononMessage(evt){
writeToScreen('RESPONSE:'+evt.data+'');
websocket.close();
functiononError(evt){
writeToScreen('ERROR:'+evt.data);
functiondoSend(message){
writeToScreen("SENT:"+message);
websocket.send(message);
functionwriteToScreen(message){
varpre=document.createElement("p");
pre.style.wordWrap="break-word";
pre[removed]=message;
output.appendChild(pre);
window.addEventListener("load",init,false);
1、WebSockets简介
要说最令人津津乐道的新浏览器API,就得数WebSockets了.WebSockets的目标是在一个单独的持久连接上提供全双工以及双向通信.在JavaScript中创建了WebSockets之后,会有一个HTTP请求发送到服务器以发起连接.在取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为WebSockets协议.也就是说,使用标准的HTTP服务器无法实现WebSockets,只有支持这种协议的专门服务器才能正常工作.
由于WebSockets使用了自定义的协议,所以URL模式也略有不同.未加密的连接不再是http://,而是ws://;加密的连接也不是https://,而是wss://.在使用WebSocketURL时,必须带着这个模式,因为将来还有可能支持其他模式.
使用自定义协议而非HTTP协议的好处是,能够在客户端和服务端之间发送少量的数据,而不必担心HTTP那样字节级的开销.由于传递的数据包很小,因此WebSockets非常使用移动应用.毕竟对移动应用而言,带宽和网络延迟都是关键问题.使用自定义协议的缺点在于,指定协议的时间比指定JavaScriptAPI的时间还长.WebSockets曾几度搁浅,就因为不断有人发现这个心协议存在一致性和安全性的问题.Firefox4和Opera11都曾默认启用WebSockets,但是在发布前夕有禁用掉了,因为有发现了安全隐患.目前支持WebSockets的浏览器有Firefox6+,Safari5+,Chrome和iOS4+版Safari.
WebSocket与TCP、HTTP的关系WebSocket与http协议一样都是基于TCP的,所以他们都是可靠的协议,Web开发者调用的WebSocket的send函数在browser的实现中最终都是通过TCP的系统接口进行传输的。
WebSocket和Http协议一样都属于应用层的协议,那么他们之间有没有什么关系呢?答案是肯定的,WebSocket在建立握手连接时,数据是通过http协议传输的,但是在建立连接之后,真正的数据传输阶段是不需要http协议参与的。
2、JavaScript中的websocket技术运用
在js文件当中运用websocket之前先检查当前浏览器是否支持websocket。固定下面代码:
//检查浏览器是否支持WebSocket
if(window.WebSocket){
console.log('ThisbrowsersupportsWebSocket');
}else{
console.log('ThisbrowserdoesnotsupportsWebSocket');
}
给一个websocket一般开发的时候会用的一些方法使用模板,代码来源:
https://www.cnblogs.com/tinywan/p/5894403.html
[removed]
varwsUri="ws://echo.websocket.org/";
varoutput;
functioninit(){
output=document.getElementById("output");
testWebSocket();
}
functiontestWebSocket(){
/**
*创建一个WebSocket对象
*url注意事项上面已经说过在此在提醒一下:
*参数是需要连接的服务器端的地址,同http协议使用http://开头一样
*WebSocket协议的URL使用ws://开头
*另外安全的WebSocket协议使用wss://开头。
*/
websocket=newWebSocket(wsUri);
/**
*WebSocket对象一共支持四个消息onopen,onmessage,onclose和onerror
*我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,
*使得UI有更快的响应时间,得到更好的用户体验。
*/
/**
*当Browser和WebSocketServer连接成功后,会触发onopen消息;
*/
websocket.onopen=function(evt){
onOpen(evt)
};
/**
*当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。
*/
websocket.onclose=function(evt){
onClose(evt)
};
/**
*当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,
*参数evt中包含server传输过来的数据;
*/
websocket.onmessage=function(evt){
onMessage(evt)
};
/**
*如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;
*/
websocket.onerror=function(evt){
onError(evt)
};
}
functiononOpen(evt){
writeToScreen("CONNECTED");
doSend("WebSocketrocks");
}
functiononClose(evt){
writeToScreen("DISCONNECTED");
}
functiononMessage(evt){
writeToScreen('RESPONSE:'+evt.data+'');
websocket.close();
}
functiononError(evt){
writeToScreen('ERROR:'+evt.data);
}
functiondoSend(message){
writeToScreen("SENT:"+message);
websocket.send(message);
}
functionwriteToScreen(message){
varpre=document.createElement("p");
pre.style.wordWrap="break-word";
pre[removed]=message;
output.appendChild(pre);
}
window.addEventListener("load",init,false);
[removed]
WebSocketTest