2014-09-22 131 views
3

我寫了一個節點程序,並且遇到了很大的困難。連接在收到握手響應之前關閉

服務器端代碼如下:

var express=require("express"); 
var app=express(); 
var socketio=require("socket.io"); 
var server=require("http").Server(app); 
var ws=socketio.listen(server); 
app.use(express.static('public')); 
app.listen(3000); 
ws.on('connection',function(socket){ 
socket.on("message",function(msg){ 
    console.log("got:"+msg); 
    socket.send('pong'); 
    }); 
}); 

客戶端代碼如下:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
<meta charset="UTF-8"> 
<title>websocket echo</title> 
</head> 
<body> 
<h1>websocket echo</h1> 
<h2>latency:<span id="latency"></span>ms</h2> 
<script> 

var lastMessage; 
window.onload=function(){ 
    //create socket 

    var ws=new WebSocket("ws://127.0.0.1:3000"); 
    ws.onopen=function(){ 
     //send first ping 
     ping(); 
    }; 
    // 監聽Socket的關閉 
    ws.onclose = function(event) { 
     console.log('Client notified socket has closed',event); 
    }; 
    ws.onmessage=function(ev){ 
     console.log("got:"+ev.data); 

     document.getElementById("latency").innerHTML=new Date-lastMessage; 
     ping(); 
    }; 
    function ping(){ 
     lastMessage= + new Date; 
     ws.send("ping"); 
    } 
} 
</script> 
</body> 
</html> 

存在鉻控制檯尖端: WebSocket連接到「WS://127.0 '0.1:3000 /'失敗:在收到握手響應(索引)之前連接已關閉:16 客戶端通知的套接字已關閉CloseEvent

+1

爲什麼不在服務器和客戶端都使用'socket.io'?它需要關心連接。 – YuS 2014-09-22 08:39:54

+0

這段代碼是完全無效的,你完全沒有使用websocket。你在你的服務器文件上使用套接字,但你試圖從你的客戶端片段連接到websocket。這裏請參考[websocket使用示例](https://github.com/Worlize/WebSocket-Node#usage-examples) – Ravi 2014-09-22 09:22:07

+1

@Ravi他使用socket.io,而不是ws。如果支持,Socket.io將連接從輪詢升級到websockets,因此您需要使用'/ socket.io/socket.io.js'上提供的socket.io庫。 – 2014-09-22 09:24:34

回答

0

與我一樣在註釋中提到這種情況是因爲socket.io應該連接到它自己的客戶端。您應該在兩邊都使用websockets或socket.io。

相關問題