html5的websockets全双工通信详解学习示例网赌平台哪个信誉好

点评:本文主要研究HTML5
WebSockets的使用方法,它是HTML5中最强大的通信功能,定义了一个全双工的通信信道,只需Web上的一个Socket即可进行通信,能减少不必要的网络流量并降低网络延迟。HTML5
WebSockets能使数据从几千字节减少到两字节,延迟从150ms减少到50ms,并且完美

      现在比较火的一类服务叫做基于位置的服务(location-based service,
LBS),这一类服务就是企业利用某点(例如用户所在的位置)坐标附近的区域提供服务的信息,比如常见的地图相关服务。在HTML5中,加入了新的地理位置API用来确定和分享地理位置。

目前实时Web应用的实现方式,大部分是围绕轮询和其他服务器端推送技术展开的,其中最著名的是Comet。Comet技术可以让服务器主动以异步方式向客户端推送数据。

隐私申明      
在与远程Web服务器共享物理位置时,隐私是一个需要关注的问题。因此,地理位置API会要求用户先提供权限,然后Web应用程序才能访问位置信息。首次访问请求地理位置数据的网页时,浏览器将显示一个通知栏,提示提供对用户位置的访问权限。按照浏览器的提示,选择相关的授权即可。
      如果用户未授予权限,则不会向 Web
应用程序提供位置信息。调用相关API不会触发成功回调。

使用轮询时,浏览器定期发送HTTP请求,并随即接收响应;使用长轮询时,浏览器向服务器发送一个请求,服务器会在一段时间内将其保持在打开状态;使用流解决方案时,浏览器会发送一个完整的HTTP请求,但服务器会发送并保持一个处于打开状态的响应,该响应持续更新并无限期处于打开状态。

检查浏览器的支持情况      
地理位置API在主流的浏览器的最新版中都支持了,但是为了兼容老的浏览器,还是要检查一下。如果地理位置
API 不可用,则 window.navigator.geolocation 将为 null,如下所示:

上述的三个方法,在发送实时数据时都会涉及到HTTP请求和响应包头,且包含大量额外的、不必要的报头数据,会造成传输延迟。

function show_islocationenabled()
{
  var str = “No, geolocation is not supported.”;  
  if (window.navigator.geolocation) {
    str = “Yes, geolocation is supported.”;
  }
  alert( str );
}

一、解读HTML5 WebSockets

      Geolocation
API基于navigator这一全局对象的一个新属性:navigator.geolocation,该对象提供了一些关于访问者的浏览器和系统的有用信息。Geolocation的信息可以通过许多手段获得:比如基站、web的数据库或是GPS等。使用不同的方式获取到的Geolocation信息精度也是不一样的,通常情况下,通过GPS获得的最为准确(移动平台上使用GPS最多,PC平台上基本都是靠网络数据)。偶然情况下,在一些位置上,你有可能不能获得明确的地理位置读数或是一点数据都接收不到。

1、WebSocket握手

定位当前位置   使用navigator.geolocation的getCurrentPosition()方法获取用户的当前位置,这个方法只获取一次位置的信息。当该方法被脚本调用时,方法以异步的方式来尝试获取宿主设备的当前位置。

为了建立WebSocket通信,客户端和服务器在初始握手时,将HTTP协议升级到WebSocket协议。一旦连接建立成功,就可以在全双工模式下在客户端和服务器之间来回传送WebSocket消息。

   方法签名:getCurrentPosition(geolocationSuccessCallback,[geolocationErrorCallback,geolocationOptions]);
  1. geolocationSuccessCallback:获取当前位置成功后的回调(必需的)
  2. geolocationErrorCallback. 有错误发生时使用的回调(可选的)
  3. geolocationOptions. 地理位置选项(可选的)

注:在网络中,每个消息以0x00字节开头,以0xFF结尾,中间数据采用UTF-8编码格式。

     

2、WebSocket接口

  处理位置信息     

除了对WebSocket协议的定义之外,还定义了用于JavaScript应用程序的WebSocket接口。

     
getCurrentPositon()方法获得当前位置成功后会将位置信息保存到一个Position对象中,然后把这个对象作为参数来执行geolocationSuccessCallback这一回调。在这个回调函数中,你可以任意处置这个对象中包含的信息。
     
Position对象有两个属性:timestamp和coords。timestamp属性表示地理位置数据的创建时间,coords属性表示地理位置信息,又包含七个属性:

代码如下:

   1. coords.latitude:估计纬度
   2. coords.longitude:估计经度
   3. coords.altitude:估计高度
   4. coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
   5. coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
  
6. coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
   7. coords.speed:以米每秒为单位的设备的当前对地速度

interface WebSocket{
readonly attribute DOMString URL;
//就绪状态
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned short bufferedAmount;
//网络
attribute Function onopen;
attribute Function onmessage;
attribute Function onclose;
boolean send(in DOMSString data);
void close();
};
WebSocket implements EventTarget;

  一般的,这些属性中有三项是保证有的:coords.latitude、coords.longitude和coords.accuracy,其余的返回null;这取决于设备的能力和其所采用的后端定位服务器。而且,heading和speed属性可以基于用户之前的位置计算出来。

注意:ws://和wss://前缀分别表示WebSocket连接和安全的WebSocket连接。

  处理错误

二、HTML5 WebSockets API

     
执行getCurrentPositon()方法时如果有错误发生的话,则该方法传递一个PositionError对象给geolocationErrorCallback回调。

本节讨论HTML5 WebSockets的使用方法

  设置地理位置选项

1、检测浏览器是否支持

      你可以设置geolocationOptions的三个属性:

通过window.WebSocket来判断浏览器是否支持。

enableHighAccuracy:如果设备支持高精度的话,这个选项表示是否启用高精度。
timeout:查询超时时间
maximumAge: 缓存的位置最大的时间数,在这一时间段内缓存可被使用。

2、API的基本用法

      看下面完整的例子:

a. WebSocket对象的创建以及与WebSocket服务器的连接

<!DOCTYPE html>
<html>
<body>
<p id=”demo”>Click the button to get your position:</p>
<button onclick=”getLocation()”>Try It</button>
<div id=”mapholder”></div>
网赌平台哪个信誉好,<script>
var x=document.getElementById(“demo”);
function getLocation() {
  if (navigator.geolocation){
    navigator.geolocation.getCurrentPosition(showPosition,showError);
  }
  else{

代码如下:

   
x.innerHTML=”Geolocation is not supported by this browser.”;

url = “ws://localhost:8080/echo”;
ws = new WebSocket(url);

  }
}

b. 添加事件监听器

function showPosition(position)
{
  var latlon=position.coords.latitude+”,”+position.coords.longitude;

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图