2014-09-22 130 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。

相关问题