WebSockets
Web Sockets 是用于 Web 运用程序流程的新1代双重通讯技术性,运作在单1套接字之上,它根据 JavaScript 插口暴漏在 HTML5 适配的访问器中。
1旦获得 Web 服务器上的 Web Socket 联接以后,便可以根据启用 send() 方式从访问器推送数据信息到服务器上,根据 onmessage 恶性事件解决程序流程从服务器接受数据信息到访问器中。
下面是建立1个新的 WebSocket 目标的 API。
JavaScript Code拷贝內容到剪贴板
- var Socket = new WebSocket(url, [protocal] );
第1个主要参数 url 用于特定要联接的 URL。第2个特性 - 端口号是可选的,假如出示,就会特定1个服务器务必适用联接取得成功的子协议书。
WebSocket 特性
下面是 WebSocket 目标的特性。假设大家早已建立了上述的 Socket 目标:
特性 |
叙述 |
Socket.readyState
写保护特性readyState表明联接的情况。有下列赋值:
-
0 表明联接并未创建。
-
1 表明联接已创建,能够开展通讯。
-
2 表明联接正在开展关掉握手。
-
3 表明联接早已关掉或联接不可以开启。
Socket.bufferedAmount
写保护特性bufferedAmount表明早已应用 send() 方式排长队的 URF⑻ 文字字节数。
WebSocket 恶性事件
下面是 WebSocket 目标有关的恶性事件。假设大家早已建立了上述的 Socket 目标:
恶性事件 |
恶性事件解决程序流程 |
叙述 |
open
Socket.onopen
创建 socket 联接时开启这个恶性事件。
message
Socket.onmessage
顾客端从服务器接受数据信息时开启。
error
Socket.onerror
联接产生不正确时开启。
close
Socket.onclose
联接被关掉时开启。
WebSocket 方式
下面是 WebSocket 目标有关的方式。假设大家早已建立了上述的 Socket 目标:
方式 |
叙述 |
Socket.send()
send(data) 方式应用联接传送数据信息。
Socket.close()
close() 方式用于停止任何现有联接。
服务器消息推送恶性事件
传统式的 Web 运用程序流程转化成推送到 Web 服务器端恶性事件。例如,点一下1个连接会从服务器恳求1个新网页页面。
这类从 Web 访问器到 Web 服务器的時间种类能够称作客服端恶性事件。
伴随着 HTML5 的出現,WHATWG Web Applications 1.0 引进了1个从 Web 服务器到 Web 访问器的恶性事件流,被称作服务器消息推送恶性事件(SSE)。应用 SSE 能够不断的将 DOM 恶性事件消息推送到客户的访问器中。
这个恶性事件流方式会开启1个到服务器的长久联接,新信息能用时推送数据信息到顾客端,从而已不必须不断的轮询。
SSE Web 运用程序流程
要在 Web 运用程序流程中应用服务器消息推送恶性事件,大家必须给文本文档加上1个 <eventsource>元素。
<eventsource> 元素的 src 特性应当指向1个 URL,这个 URL 应当出示1个 HTTP 长久联接用于推送包括恶性事件的数据信息流。
这个 URL 可能指向1个不断推送恶性事件数据信息的 PHP,PERL 或随意 Python 脚本制作。下面是1个简易的期待得到服务器時间的 Web 运用程序流程示例。
XML/HTML Code拷贝內容到剪贴板
- <!DOCTYPE HTML>
- <html>
- <head>
- <script type="text/javascript">
- /* Define event handling logic here */
- </script>
- </head>
- <body>
- <div id="sse">
- <eventsource src="/cgi-bin/ticker.cgi" />
- </div>
- <div id="ticker">
- <TIME>
- </div>
- </body>
- </html>
SSE 服务器端脚本制作
服务器端脚本制作应当推送 Content-type 头特定种类为 text/event-stream,以下所示:
print "Content-Type: text/event-stream\n\n";
设定 Content-type 以后,服务器端脚本制作将推送1个后边紧跟恶性事件名字的 Event: 标识。下面的示例可能推送1个以换行符完毕的 Server-Time 做为恶性事件名字。
print "Event: server-time\n";
最终1步是应用 Data: 标识推送恶性事件数据信息,紧随其后的是以换行符完毕的整数金额标识符串值,以下所示:
$time = localtime();
print "Data: $time\n";
下面是用 perl 撰写的详细 ticker.cgi:
#!/usr/bin/perl
print "Content-Type: text/event-stream\n\n";
while(true){
print "Event: server-time\n";
$time = localtime();
print "Data: $time\n";
sleep(5);
解决服务器消息推送恶性事件
让大家改动1下大家的 Web 运用程序流程来解决服务器消息推送時间。下面是最后示例:
XML/HTML Code拷贝內容到剪贴板
- <!DOCTYPE HTML>
- <html>
- <head>
- <script type="text/javascript">
- document.getElementsByTagName("eventsource")[0].
- addEventListener("server-time", eventHandler, false);
- function eventHandler(event)
- {
- // Alert time sent by the server
- document.querySelector('#ticker').innerHTML = event.data;
-
- }
- </script>
- </head>
- <body>
- <div id="sse">
- <eventsource src="/cgi-bin/ticker.cgi" />
- </div>
- <div id="ticker" name="ticker">
- [TIME]
- </div>
- </body>
- </html>
在检测服务器消息推送恶性事件以前,提议你保证你的 Web 访问器适用这1定义。