websocket服务端消息推送,websocket event
WebSockets
Web Sockets是Web应用程序的新一代双向通信技术,它运行在单个套接字上。它通过JavaScript接口在兼容HTML5的浏览器中公开。
一旦在Web服务器上获得了Web套接字连接,就可以通过调用send()方法将数据从浏览器发送到服务器,并通过onmessage事件处理程序将数据从服务器接收到浏览器。
下面是用于创建新WebSocket对象的API。
代码将内容复制到剪贴板varsocket=newwebsocket (URL,[protocal]);第一个参数url用于指定要连接的URL。第二个属性-port是可选的。如果提供,它将指定服务器必须支持成功连接的子协议。
WebSocket 属性这里是WebSocket对象的属性。假设我们已经创建了上面提到的套接字对象:
描述Socket.readyState只读属性readyState指示连接的状态。以下是可用的值:
0表示尚未建立连接。
1表示连接已经建立,可以进行通信。
2表示连接正在关闭握手。
3表示连接已经关闭或无法打开。
Socket.bufferedAmount的只读属性bufferedAmount指示使用send()方法排队的URF 8文本字节数。
WebSocket 事件以下事件与WebSocket对象相关。我们假设已经创建了上面提到的Socket对象:Event事件处理程序描述OpenSocket。当通过onOpen建立套接字连接时,会触发此事件。消息Socket.onmessage客户端在从服务器接收数据时被触发。出现错误时,将触发错误Socket.onerror连接。当close.onclose连接关闭时触发。WebSocket 方法下面是WebSocket对象相关的方法。假设我们已经创建了上面提到的Socket对象:方法描述Socket.send() send(data)方法使用connection来传输数据。
Socket.close() close()方法用于终止任何现有的连接。
服务器推送事件传统的Web应用程序生成发送到Web服务器的事件。例如,单击一个链接将向服务器请求一个新页面。
这种从Web浏览器到Web服务器的时间可以称为客户服务事件。
随着HTML5的出现,WHATWG Web Applications 1.0引入了从Web服务器到Web浏览器的事件流,称为服务器推送事件(SSE)。SSE可以不断地将DOM事件推送到用户的浏览器。
这个事件流方法将打开一个到服务器的持久连接,并在新消息可用时向客户端发送数据,从而消除了连续轮询的需要。
SSE Web 应用程序要在Web应用程序中使用服务器推送事件,我们需要在文档中添加一个eventsource元素。
eventsource元素的src属性应该指向一个URL,该URL应该为发送包含事件的数据流提供HTTP持久连接。
这个URL将指向一个PHP、PERL或任何持续发送事件数据的Python脚本。下面是一个期望获得服务器时间的Web应用程序的简单示例。
XML/HTML Code复制内容到剪贴板!doctype html html head script type= text/JavaScript /* defineeventhandlinglogic here *//script/head body divid= SSE 事件源src=/CGI-bin/ticker。CGI //div divid= ticker TIME/div/body/htmlSSE 服务器端脚本服务器端脚本应该发送内容类型头指定类型为文本/事件流,如下所示:
复制代码代码如下:print " Content-Type:text/event-stream \ n \ n ";
设置内容类型之后,服务器端脚本将发送一个后面紧跟事件名称的事件:标签。下面的示例将会发送一个以换行符结束的服务器时间作为事件名称。
复制代码代码如下:print Event:server-time \ n ;
最后一步是使用数据:标签发送事件数据,紧随其后的是以换行符结束的整数字符串值,如下所示:
复制代码代码如下:$ time=本地时间();
打印"数据:$ time \ n ";
下面是用实际抽取与汇报语言编写的完整ticker.cgi:
复制代码代码如下:
#!/usr/bin/perl
打印“内容类型:文本/事件流\ n \ n”;
while(true){
打印“事件:服务器时间\ n”;
$ time=本地时间();
打印"数据:$ time \ n ";
睡眠(5);
处理服务器推送事件让我们修改一下我们的网应用程序来处理服务器推送时间。下面是最终示例:
XML/HTML代码复制内容到剪贴板!doctype html html头脚本type= text/JavaScript 文档。getelementsbytagname(事件源)[0].addEventListener(server-time ,eventHandler,false);函数eventhandler(event){//Alerttimesentbytheserver文档。查询选择器(“# ticker”).innerHTML=event . data }/script/head body divid= SSE 事件源src=/CGI-bin/ticker。CGI //div divid= ticker name= ticker [TIME]/div/body/html在测试服务器推送事件之前,建议你确保你的网浏览器支持这一概念。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。