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
爲什麼不在服務器和客戶端都使用'socket.io'?它需要關心連接。 – YuS 2014-09-22 08:39:54
這段代碼是完全無效的,你完全沒有使用websocket。你在你的服務器文件上使用套接字,但你試圖從你的客戶端片段連接到websocket。這裏請參考[websocket使用示例](https://github.com/Worlize/WebSocket-Node#usage-examples) – Ravi 2014-09-22 09:22:07
@Ravi他使用socket.io,而不是ws。如果支持,Socket.io將連接從輪詢升級到websockets,因此您需要使用'/ socket.io/socket.io.js'上提供的socket.io庫。 – 2014-09-22 09:24:34