2012-02-28 38 views
1

我有問題,當我想在我的應用程序上嘗試網絡套接字技術。 但我想問一下關於web socket的requiretment。是否可以在Web套接字上使用不同的語言?

1)更多鈔票是我使用的服務器用JavaScript語言EX是socket.io

var io = require('socket.io').listen(3001); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', {hello: 'can you hear me'}); 
}); 

,並使用Java語言例如客戶端socket.io.java 我使用這個方法從服務器獲取消息

public void onMessage(JSONObject json, IOAcknowledge ack) { 
       Log.d("We received a message: " , json.toString()); 
      } 

與我的socket服務器是

SocketIO socket = new SocketIO("http://127.0.0.1:3001/news"); 

2)是否支持所有機器?或瀏覽器嗎?我是在web套接字編程新手,請幫我

感謝您的答案...

回答

3

是的,你可以用你想要的任何語言來構建服務器,但是網絡套接字不是一個簡單的套接字,它們是「遵循」特定協議的套接字,因此請確保你閱讀了這個協議的規範並實現它在你的服務器上,這樣任何瀏覽器都能夠建立一個連接。

你也可以用任何語言編寫客戶端,但是如果你沒有使用javascript,那麼我不明白你爲什麼要使用web套接字而不是使用簡單的套接字。但是,如果你想,只要看看瀏覽器發送到Web套接字服務器的數據,並從你自己的客戶端模擬它。

+0

我正在使用javascript測試客戶端,我可以發送每次請求並從服務器獲取響應...當我在客戶端使用另一種語言時,我有堆棧,我認爲我的代碼錯過了。 – viyancs 2012-02-28 07:43:05

+0

可能因爲您沒有從您的客戶端發送握手數據,這是web套接字協議所要求的。當你使用Javascript時,瀏覽器會爲你做好準備,但如果你正在編寫你自己的客戶端,你必須自己做。 – Delta 2012-02-28 07:47:49

+0

感謝您的回答,我解決了我的問題,我發送握手到服務器,但我不處理,所以我無法從客戶端獲得消息,只是給予處理,我可以完美地運行我的程序...: ) – viyancs 2012-02-29 04:42:18

1

爲了詳細闡述臺達的答案,「websockets」是HTTP協議的一種變體,客戶端發送HTTP請求消息,服務器發送HTTP響應,然後客戶端和服務器使用仍然打開的TCP/IP連接做「其他事情」。請求和響應包含特殊的頭文件,允許客戶端和服務器同意以這種方式使用連接。

爲了達到此目的,客戶端和服務器都需要了解HTTP協議的至少一個子集才能執行初始「握手」。因此,不能只需使用websocket客戶端與普通套接字服務器進行通信;反之亦然。 (如果你試圖做到這一點,兩端都會看到意外的東西/協議錯誤,並且websocket會立即關閉其TCP/IP連接的結尾。)

話雖如此,websocket客戶端和websocket服務器可以用任何現代編程語言來實現。 (對於普通的套接字客戶端和服務器也是如此)。

+0

WebSockets不是HTTP的變體。它具有HTTP友好的初始握手,但之後更像是原始套接字(全雙工,雙向,持久)。 HTTP友好的握手使得在同一端口(80,443)上運行WebSocket服務器和Web服務器變得容易,這使得它可以與現有的防火牆配置一起工作。 – kanaka 2012-02-28 14:07:23

相關問題