2014-09-22 3 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

+0

этот код абсолютно недействителен, вы «не используете веб-сайты» вообще. Вы используете «сокет» в файле своего сервера, но пытаетесь подключиться к websocket со своего фрагмента на стороне клиента. См. Здесь [пример использования websocket] (https://github.com/Worlize/WebSocket-Node#usage-examples) – Ravi

+1

@Ravi Он использует socket.io, а не ws. Socket.io обновляет соединение от опроса до websockets, если он поддерживается, поэтому вам нужно использовать библиотеку socket.io, которая находится в '/ socket.io/socket.io.js'. –

ответ

0

Как мне в комментариях это происходит потому, что socket.io должен быть связан с его собственным клиентом. Вы должны либо использовать websockets, либо socket.io с обеих сторон.

Смежные вопросы