2014-11-21 68 views
1

在我的MELT monitor(GPLv3免費軟件,alpha階段,後面將涉及到MELT,一個領域特定的語言來擴展GCC編譯器;它是一個專門的HTTP服務器[meta-]編程在C中,即它的C代碼將會越來越多地自我生成),使用libonion(一個HTTP服務器庫)和jquery.websocket,我想僅使用websocket來處理來自我專門的Web服務器的JSON格式的異步消息(MELT監視器)到瀏覽器(例如最近的FireFox)。只寫websocket通信(從HTTP服務器到瀏覽器)

我想避免從瀏覽器到服務器有一個新的事件通道,所以我的問題是:是否有意義使用Web服務器僅用於HTTP服務器瀏覽器異步通信(而不是使用其他方式傳輸,從瀏覽器到HTTP服務器)?

能專門HTTP服務器(熔體顯示器)上的WebSocket做SHUT_RD一個shutdown(2)禁用通WebSocket的從瀏覽器到HTTP服務器任何潛在的傳輸,或者是違背WebSockets的標準是什麼?從瀏覽器到服務器的所有通信都是同步HTTP(例如AJAX)。

我剛剛發現的WebSockets ....

回答

3

的WebSockets是其上時,他們希望雙方能發送數據的全雙工通道。這使得它非常適合服務器向客戶端發送未通知數據的場景,因爲使用像XmlHttpRequest這樣的先前技術時,服務器只能在先前請求時發送數據。

RFC 6455指出符合標準的Websocket服務器必須用PONG幀響應PING幀。當您關閉客戶端到服務器的通道時,客戶端將無法再發送ping命令。另外,當客戶想要終止你應該聽的連接時,客戶端將發送一個CLOSE幀。

但是,標準並沒有說你的服務器必須在握手完成後以任何特定的方式回覆任何其他幀,所以你可以忽略來自客戶端的任何傳入幀,除了PING和CLOSE。