2015-12-19 112 views
4

我已經編寫了套接字的代碼:source在收到握手響應之前關閉套接字連接

我的代碼如下所示。

var port = 8081; 
var app = require('http').createServer(); 
var io = require('socket.io')(app); 
app.listen(port); 

io.on('connection', function (socket) { 
    console.log("New user connected."); 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
     console.log(data); 
    }); 
}); 
console.log("server listening on: " + port); 

但是當我在here(ws:// localhost:8081)上測試它時。我得到 錯誤:未定義 DISCONNECTED

在控制檯我得到錯誤:

WebSocket connection to 'ws://localhost:8081/?encoding=text' failed: Connection closed before receiving a handshake response 

回答

3

您需要使用socket.io客戶端庫,要麼得到它,從here,或引用其CDN你的網頁是這樣的:

<script src="https://cdn.socket.io/socket.io-1.3.7.js"></script> 

此外,當你啓動服務器socket.io,socket.io將從http://<your-server-address>/socket.io/socket.io.js服務。您應該能夠使用這個簡單的頁面來測試您的服務器:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Document</title> 
     <script src="http://localhost:8081/socket.io/socket.io.js"></script> 
     <script> 
      var socket = io('http://localhost:8081/'); 
      socket.on('news', function (data) { 
       console.log(data); 
       socket.emit('my other event', { my: 'data' }); 
      }); 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

你可以閱讀更多關於爲什麼你不能從websocket.org網站連接上這個github issue

+0

我還有一個問題,我有require('socket.io')和另一個require('ws')兩個實現。你能否建議我應該選擇哪一個。我正在開發它的Android應用程序。 –

+1

在沒有更多的信息,我會去socket.io。它具有許多功能,如處理客戶端重新連接到服務器,以及如果websocket不可用,則回退到其他連接類型。我已經看到(相當老)的基準,顯示ws更高性能的處理更多的連接,但我不認爲差異在大多數情況下是相關的。既然你的目標是android,你可以使用他們的[android本機客戶端](https://github.com/socketio/socket.io-client-java)或者使用webviews的普通客戶端。 – cviejo

相關問題