Boost ASIO WebSocket Server 網站憑證設定

Heresy 這邊很早之前,就有開始使用 WebSocket++ 來開發自己的 WebSocket Server;而後來其實也有改用 Boost.Beast 來做同樣的工作。而這兩套函式庫的底層,其實都是 Boost::asio(官網),所以其實在某些地方還滿接近的。

而之前用起來都還算很正常,不管是老老的 IE 還是 Chrome 都可以使用,在有申請 SSL 憑證的情況下,就算建立加密的 WSS 也是可以正確使用的。

但是,前陣子當想使用 node.js(官網)來進行 WebSocket 的連線的時候,卻發現會出現「unable to verify the first certificate」的錯誤。

閱讀更多»

WebSocket++ 的 Client

由於從去年開始,Heresy 就開始有在寫網頁的東西了,所以也開始玩 HTML5 新的 WebSocket 這項技術。而由於當初自己透過 C++ 來建立 WebScoket Server 的需求,所以後來就去找了 WebSocket++ 這個函式庫(官網)來用。

當時也邊學邊寫了幾篇文章,算是自己的紀錄。有興趣的可以參考:

不過,當時 Heresy 都只有把它拿來建立 Server 過,並沒有用來建立 Client 端的經驗;而由於最近要用 C++ 寫個 WebSocket Client,所以就在來追加一下這系列的文章吧~

閱讀更多»

OpenNI 人體骨架的網頁方案:webNI

Heresy 自己玩 OpenNI、從 OpenNI 1.x 開始、到現在的 2.x,算是玩滿久的了~不過由於主要是工作上在用,所以在公開的東西的部分,除了課程教材的範例程式(OpenNI 1OpenNI 2)外,似乎就只有之前的 DxOpenNI for OpenNI 2 了。而 Heresy 自己也一直有想要寫一些可以公開的程式,所以就弄出了這個「webNI」。

webNI 基本上的概念,大致上是:

建立一個 webNI Server,和網頁透過 HTML5 的 WebSocket 這個技術(維基百科)來連線、存取 OpenNI、NiTE 所分析的出來的人體骨架;如此一來,網頁上就也可以使用 Microsoft Kinect 或 ASUS Xtion 這類感應器的功能了。

閱讀更多»

透過 WebSocket 傳送 Binary 資料:ArrayBuffer(補充)

這篇基本上是針對前一篇《透過 WebSocket 傳送 Binary 資料:ArrayBuffer》作一些補充。
在《透過 WebSocket 傳送 Binary 資料:ArrayBuffer》一文中,Heresy 主要是在針對由 WebSocket++ 的 C++ Server,傳遞 binary 資料到網頁的 JavaScript Client 來做說明。不過相對的,Heresy 倒是忘了要去弄反方向、也就是由 JavaScript 送 binary 資料到 Server 的部分了;而這一篇,就是簡短地說明一下,反過來由 JavaScript 送到 WebSocket++ Server 要怎麼做。

閱讀更多»

透過 WebSocket 傳送 Binary 資料:ArrayBuffer

這篇算是延續之前的《HTML5 WebSocket Client》和《C++ WebSocket 函式庫:WebSocket++》這兩篇文章,來整理一下,除了傳遞文字資料外,要怎麼透過 WebSocket 來傳遞 Binary 資料。而 client 端基本上還是一般的 JavaScript、Server 端也就還是 WebSocket++ 了~

基本上,WebSocket 在 JavaScript 這端,除了純文字(DOMString),在二進位資料的方面,還支援 BlobArrayBuffer 兩種類型的資料。Blob 基本上是一種沒有特定原生 JavaSctipt 型別的 RAW Data,裡面可以塞各式各樣的東西(參考);而 ArrayBuffer 則是固定寬度的陣列資料,不過由於本身沒有記錄內容的型別,所以必須透過 ArrayBufferView 的物件、來指定內容的型別做存取(參考)。

而 Heresy 這邊,基本上就是使用 ArrayBuffer 來做資料的傳遞 C++ 裡面的陣列。

閱讀更多»

C++ WebSocket 函式庫:WebSocket++

在上一篇《HTML5 WebSocket Client》裡,算是很簡單地介紹了 WebSocket 的概念,以及在網頁上、使用 JavaScript 開發 client 端程式的方法。而至於 Server 端呢?其實目前已經有很多方案,都可以用來建立 WebSocket Server 了。不過,由於 Heresy 這邊的需求,是要使用 C++ 搭配現有的函式庫來開發,所以不太適合使用一般的網站伺服器方案;而在稍微評估了一下後,後來是決定使用「WebSocket++」這個函式庫,來做為 C++ 環境的 WebSocket Server 開發方案。

WebSocket++ 的官方網站是:http://www.zaphoyd.com/websocketpp,他是採用 BSD License 的 OpenSource、跨平台函式庫,檔案則都放在 Github 上(網頁)。他目前最新的版本是 0.3.x,在 Github 上要切換到「experimental」這個 brahch;而這個版本的 WebSocket++ 基本上是使用 C++11 以及 Boost C++ Libraries 裡的 ASIO(官網)來實作的 Header-Only 的函式庫,所以在使用前不需要特別去建置這個函式庫、只要在需要時去 include 他的 Header 檔就可以了,相當地方便。

閱讀更多»

HTML5 WebSocket Client

最近因為有需要開發互動式網頁,而且又需要頻繁地和 server 端坐溝通,所以除了 ajax 之外,也開始研究一些新的東西;而其中一個,就是可以更節省頻寬的 WebSocket、這個 HTML 5 的通訊方法了~

關於 WebSocket 的介紹,建議慶直接參考維基百科,或是 WebSocket.org 的介紹;完整的 API 則可以參考 W3C 的網頁。在 Heresy 來看,WebSocket 和傳統的 HTML 資料取得的方法相比,最大的好處,就是由於 WebSocket 是建立一個持續性的連線,不需要重複地不斷建立連線,所以可以有效地降低延遲、並且減少資料的傳輸輛。

像右圖就是 WebSocket.org 所提供的示意圖,可以看到隨著要求存取的次數的增加,傳統的「Polling」的資料存取方法所需的頻寬會上升地非常地快;相較之下,WebSocket 的頻寬則可以省非常地多。

閱讀更多»