1、html5 怎麼樣可以向rtmp進行推送攝像頭採集的數據流
使用 websocket , 這是html5新特性,當然也要求後台伺服器支持,現在很多伺服器已經支持了。
2、html5 的伺服器推送 Server-sent Events和 websocket這兩個是不是同一個東西,是兩個不同的?求大神解釋
Server-Sent Events
運行原理
瀏覽器通過HTTP向伺服器發送請求,伺服器端拿出資料庫中的最新的信息,立即返回給客戶端,客戶端等待三秒後再次發出下一個請求。
實現方式
同樣,瀏覽器中HTML兩個input,JavaScript模塊打開EventSource,把接受者的id傳給服務端。
客戶端收到相應後,onMessage事件的處理器將被調用。瀏覽器將每3秒發送一個請求,除非將連接關閉(Close方法)。
WebSockets
運行原理
客戶端通知WebSockets伺服器一個事件,告訴他接收者id,伺服器將立即通知消息,當任何新的未讀消息來的時候,伺服器都將立即返回數據給客戶端。
客戶端打開一個WebSockets連接而且在/notification/updates上訂閱一個事件處理。在HTML中添加一個發送向/notification/presents發送接收者id的button。這將在所有的打開連接中引起廣播消息。所以每一個活躍的客戶端都收到通知,客戶端會檢查消息中的id是否是當前登錄的用戶的id,如果是就更新通知數量。
總結
瀏覽器兼容性
Server-Sent Events支持Chrome9+、Firefox6+、Opera11+、Safari5+
Chrome14、Firefox7支持最新的hybi-10協議,Firefox6支持hybi-07.
伺服器負載
Server-Sent Events工作的方式有很多,除非Server-Sent Events不必在每一次響應發出後都關閉連接。
WebSockets,伺服器只需要一個進程處理所有的請求,沒有循環,不必為每個客戶端都分配cpu和內存。
客戶端負載
Server-Sent Events採用瀏覽器的內置的實現方式,只花費很少的一部分資源。
WebSockets跟Server-Sent Events一樣,採用瀏覽器的內置的實現方式,只花費很少的一部分資源。
時間線
Server-Sent Events默認延時3秒,但是可以調整。
WebSockets真正的實時
實現方式復雜度
Server-Sent Events甚至比Long-polling更簡單
需要一個WebSockets伺服器處理事件,並開放一個埠
3、HTML5 WebSocket如何實現消息推送?
HTML5中WebSocket實現消息推送的方法:
1、創建伺服器連接:
var socket = new WebSockect('ws://localhost:8080');
2、增加監控事件,當觸發open方法時,建立內連接准備發送消息。容
socket.addEventListener('open', function(){
console.log("Connection established, handle with event");
});
socket.onopen = function(){
console.log("Connection established, handle with function");
};
3、調用方法發送消息:
socket.send("Somme Message to send to the server");
4、關閉連接
socket.close();
4、html5消息推送功能怎麼做
websocket h5新特性
1、創建伺服器連接:
var socket = new WebSockect('ws://localhost:8080');
2、增加監控事件,當觸發open方法時,建立連接准備內發送消息。
socket.addEventListener('open', function(){
console.log("Connection established, handle with event");
});
socket.onopen = function(){
console.log("Connection established, handle with function");
};
3、調用方法發容送消息:
socket.send("Somme Message to send to the server");
4、關閉連接
socket.close();
5、html5 的server-sent event事件還需要客戶端請求伺服器端才能推送嗎?
根據w3school原文
This was also possible before, but the web page would have to ask if any updates were available. With server-sent events, the updates come automatically.
以下是個人理解
這個event是需要客戶端發送給伺服器一個request讓伺服器來查看是否專有更新,然後如屬果有更新伺服器將更新自動發回客戶端,
所謂的 one way messaging,指的是客服端與伺服器成功建立了EventSource後,客戶端發的request不需要夾帶任何信息比如user id等,然後伺服器將通過這個通道直接發送回message
希望能幫到您
6、Html5怎麼實現消息推送
websocket h5新特性
1、創建伺服器連接:
var socket = new WebSockect('ws://localhost:8080');
2、增加監控事件,當觸發回open方法時,建立連接准備發送消息。
socket.addEventListener('open', function(){
console.log("Connection established, handle with event");
});
socket.onopen = function(){
console.log("Connection established, handle with function");
};
3、調答用方法發送消息:
socket.send("Somme Message to send to the server");
4、關閉連接
socket.close();
7、Html5怎麼實現消息推送?並且服務端可用C#編寫。
C#的話,直接用signalR就好了,到處都有消息推送和即時聊天的例子。signalR的好處是,專它在html5上使用websocket,在早屬期瀏覽器上自動降級為長輪詢,還可以支持各種客戶端、伺服器端語言。不用關心底層。
8、html5現在可以實現伺服器推送了嗎
對於某些類型的應用來說,伺服器推送事件是最佳的選擇。本文對伺服器推送技術進行了詳細的介紹,包含瀏覽器端和伺服器端的相應實現細節,為在實踐中使用該技術提供了指南。
對於一般的 Web 應用開發,大多數開發人員並不陌生。在 Web 應用中,瀏覽器和伺服器之間使用的是請求 / 響應的交互模式。瀏覽器發出請求,伺服器根據收到的請求來生成相應的響應。瀏覽器再對收到的響應進行處理,展現給用戶。響應的格式可能是 HTML、XML 或 JSON 等。隨著 REST 架構風格和 AJAX 的流行,伺服器更多地使用 JSON 作為響應的數據格式。Web 應用使用 XMLHttpRequest 對象來發送請求,並根據伺服器端返回的數據,對頁面的內容進行動態更新。通常來說,用戶在頁面上的操作,比如點擊或移動滑鼠,會觸發相應的事件。由 XMLHttpRequest 對象來發出請求,得到伺服器響應之後進行頁面的局部更新。這種方式的不足之處在於:伺服器端產生的數據變化不能及時地通知瀏覽器,而是需要等到下次請求發出時才能被瀏覽器獲取。對於某些對數據實時性要求很高的應用來說,這種延遲是不能接受的。
為了滿足這類應用的需求,就需要有某種方式能夠從伺服器端推送數據給瀏覽器,以保證伺服器端的數據變化可以在第一時間通知給用戶。目前常見的解決辦法有不少,主要可以分成兩類。這兩類方法的區別在於是否基於 HTTP 協議來實現。不使用 HTTP 協議的做法是使用 HTML 5 新增的 WebSocket 規范,而使用 HTTP 協議的做法則包括簡易輪詢、COMET 技術和本文中要介紹的 HTML 5 伺服器推送事件。下面會對這幾種技術進行介紹。
簡介
在介紹 HTML 5 伺服器推送事件之前,首先介紹一些上面提到的幾種伺服器端數據推送技術。第一種是 WebSocket。WebSocket 規范是 HTML 5 中的一個重要組成部分,已經被很多主流瀏覽器所支持,也有不少基於 WebSocket 開發的應用。正如名稱所表示的一樣,WebSocket 使用的是套接字連接,基於 TCP 協議。使用 WebSocket 之後,實際上在伺服器端和瀏覽器之間建立一個套接字連接,可以進行雙向的數據傳輸。WebSocket 的功能是很強大的,使用起來也靈活,可以適用於不同的場景。不過 WebSocket 技術也比較復雜,包括伺服器端和瀏覽器端的實現都不同於一般的 Web 應用。
除了 WebSocket 之外,其他的實現方式是基於 HTTP 協議來達到實時推送的效果。第一種做法是簡易輪詢,即瀏覽器端定時向伺服器端發出請求,來查詢是否有數據更新。這種做法比較簡單,可以在一定程度上解決問題。不過對於輪詢的時間間隔需要進行仔細考慮。輪詢的間隔過長,會導致用戶不能及時接收到更新的數據;輪詢的間隔過短,會導致查詢請求過多,增加伺服器端的負擔。
COMET 技術改進了簡易輪詢的缺點,使用的是長輪詢。長輪詢的方式在每次請求時,伺服器端會保持該連接在一段時間內處於打開狀態,而不是在響應完成之後就立即關閉。這樣做的好處是在連接處於打開狀態的時間段內,伺服器端產生的數據更新可以被及時地返回給瀏覽器。當上一個長連接關閉之後,瀏覽器會立即打開一個新的長連接來繼續請求。不過 COMET 技術的實現在伺服器端和瀏覽器端都需要第三方庫的支持。
綜合比較上面提到的 4 種不同的技術,簡易輪詢由於其本身的缺陷,並不推薦使用。COMET 技術並不是 HTML 5 標準的一部分,從兼容標準的角度出發,也不推薦使用。WebSocket 規范和伺服器推送技術都是 HTML 5 標準的組成部分,在主流瀏覽器上都提供了原生的支持,是推薦使用的。不過 WebSocket 規范更加復雜一些,適用於需要進行復雜雙向數據通訊的場景。對於簡單的伺服器數據推送的場景,使用伺服器推送事件就足夠了。
在瀏覽器支持方面,伺服器推送事件已經在除 IE 外的大部分桌面和移動瀏覽器上得到了支持。支持伺服器推送事件的瀏覽器及其版本包括:Firefox 6.0+、Chrome 6.0+、Safari 5.0+、Opera 11.0+、iOS Safari 4.0+、Opera Mobile 11.1+、Chrome for Android 25.0+、Firefox for Android 19.0+ 以及 Blackberry Browser 7.0+ 等。關於 IE 的支持,在下面的章節中有詳細的介紹。
下面對伺服器推送事件的規范進行具體的說明。
規范
Server-sent Events 規范是 HTML 5 規范的一個組成部分,具體的規範文檔見參考資源。該規范比較簡單,主要由兩個部分組成:第一個部分是伺服器端與瀏覽器端之間的通訊協議,第二部分則是在瀏覽器端可供 JavaScript 使用的 EventSource 對象。通訊協議是基於純文本的簡單協議。伺服器端的響應的內容類型是「text/event-stream」。響應文本的內容可以看成是一個事件流,由不同的事件所組成。每個事件由類型和數據兩部分組成,同時每個事件可以有一個可選的標識符。不同事件的內容之間通過僅包含回車符和換行符的空行(「\r\n」)來分隔。每個事件的數據可能由多行組成。代碼清單 1 給出了伺服器端響應的示例。
清單 1. 伺服器端響應的示例
data: first event
data: second event
id: 100
event: myevent
data: third event
id: 101
: this is a comment
data: fourth event
data: fourth event continue
如代碼清單 1 所示,每個事件之間通過空行來分隔。對於每一行來說,冒號(「:」)前面表示的是該行的類型,冒號後面則是對應的值。可能的類型包括:
類型為空白,表示該行是注釋,會在處理時被忽略。
類型為 data,表示該行包含的是數據。以 data 開頭的行可以出現多次。所有這些行都是該事件的數據。
類型為 event,表示該行用來聲明事件的類型。瀏覽器在收到數據時,會產生對應類型的事件。
類型為 id,表示該行用來聲明事件的標識符。
類型為 retry,表示該行用來聲明瀏覽器在連接斷開之後進行再次連接之前的等待時間。
在代碼清單 1 中,第一個事件只包含數據「first event」,會產生默認的事件;第二個事件的標識符是 100,數據為「second event」;第三個事件會產生類型為「myevent」的事件;最後一個事件的數據為「fourth event\nfourth event continue」。當有多行數據時,實際的數據由每行數據以換行符連接而成。
如果伺服器端返回的數據中包含了事件的標識符,瀏覽器會記錄最近一次接收到的事件的標識符。如果與伺服器端的連接中斷,當瀏覽器端再次進行連接時,會通過 HTTP 頭「Last-Event-ID」來聲明最後一次接收到的事件的標識符。伺服器端可以通過瀏覽器端發送的事件標識符來確定從哪個事件開始來繼續連接。
對於伺服器端返回的響應,瀏覽器端需要在 JavaScript 中使用 EventSource 對象來進行處理。EventSource 使用的是標準的事件監聽器方式,只需要在對象上添加相應的事件處理方法即可。EventSource 提供了三個標准事件,如表 1 所示。
表 1. EventSource 對象提供的標准事件
名稱
說明
事件處理方法
open 當成功與伺服器建立連接時產生 onopen
message 當收到伺服器發送的事件時產生 onmessage
error 當出現錯誤時產生 onerror
如之前所述,伺服器端可以返回自定義類型的事件。對於這些事件,可以使用 addEventListener 方法來添加相應的事件處理方法。代碼清單 2 給出了 EventSource 對象的使用示例。
清單 2. EventSource 對象的使用示例
var es = new EventSource('events');
es.onmessage = function(e) {
console.log(e.data);
};
es.addEventListener('myevent', function(e) {
console.log(e.data);
});
如代碼清單 2 所示,在指定 URL 創建出 EventSource 對象之後,可以通過 onmessage 和 addEventListener 方法來添加事件處理方法。當伺服器端有新的事件產生,相應的事件處理方法會被調用。EventSource 對象的 onmessage 屬性的作用類似於 addEventListener( 『 message 』 ),不過 onmessage 屬性只支持一個事件處理方法。
在介紹完伺服器推送事件的規范內容之後,下面介紹伺服器端的實現。
9、html5 怎麼向rtmp伺服器進行推送攝像頭採集的數據流
這個不用你轉,你只要使用NetConnection類來傳數據就行,FlashPlayer會自動幫你轉。不光是rtmp,你要推送http,FlashPlayer也會自動幫你轉。