2011-10-19 50 views
1

在互聯網中,我找不到任何使用Javascript(作爲web客戶端)和Java(作爲web服務器)的「websocket二進制框架」通信的示例。websocket二進制框架示例

你可以任何人發佈「websocket二進制框架」溝通的幾個例子嗎?

+0

我曾經發布過一些關於二進制幀的僞代碼:http://stackoverflow.com/questions/7040078/not-sure-how-to-frame-data-in-websockets-draft-08/7045885#7045885。 – pimvdb

回答

2

自至少7.5.2版以來,Jetty支持WebSockets中的二進制框架。下面是一個包含二進制幀的碼頭示例:https://www.eclipse.org/jetty/documentation/9.4.x/jetty-websocket-api-send-message.html

從服務器的角度來看,發送和接收二進制數據之間幾乎沒有什麼區別,它只是一個操作碼更改。發送文本時,您僅限於使用UTF-8編碼的數據。用二進制你沒有這個限制。從瀏覽器的角度來看,如果瀏覽器支持二進制數據(實際上只支持最近的Chrome版本),那麼發送二進制數據包括使用WebSocket對象上的send()方法發送一個數組緩衝區或blob。如果服務器發送二進制幀,則會自動接收二進制數據。但是,您可以通過在WebSocket對象實例上設置binaryType屬性來選擇接收Blob或陣列緩衝區。

+0

鏈接發生錯誤404 –

+1

@stackerflow Autobahn顯然沒有爲第三方服務器生成報告。我用一個二進制框架替換了Jetty示例中的鏈接。 – kanaka

1

Kaazing WebSocket Gateway現在已經有二進制支持了很長時間了。此外,它也適用於本身不支持WebSocket的舊版瀏覽器。除了JavaScript之外,還有對客戶端的支持。因此,您可以使用JavaScript,Flash/Flex,Silverlight,.Net或Java對WebSocket執行二元操作。您可以使用任何瀏覽器,回退模擬將在舊版瀏覽器中運行。

後端服務器可以是Java或任何偵聽TCP端口的東西。

0

我只知道如何解開從瀏覽器發送的內容,這裏是我的代碼:

socket.ondata = function(src,start,end) { 
    src = src.slice(start,end); 
    var maskKeys = [src[2],src[3],src[4],src[5]]; 
    var dest = new Array(); 
    for(var i=0;i<src.length-6;i++){ 
     var mKey = maskKeys[i%4]; 
     dest[i] = mKey^src[6+i]; 
    } 
    console.log(new Buffer(dest).toString()); 
} 

從這裏找到:http://songpengfei.iteye.com/blog/1178310

鏈接有一個壓縮C源代碼,我將其更改爲節點。現在我正在學習如何將數據發送給客戶端。