Я пишу программу-узел, и я сталкиваюсь с большим затруднением.Соединение закрыто до получения ответа на подтверждение связи
стороны код сервера ниже:
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
этот код абсолютно недействителен, вы «не используете веб-сайты» вообще. Вы используете «сокет» в файле своего сервера, но пытаетесь подключиться к websocket со своего фрагмента на стороне клиента. См. Здесь [пример использования websocket] (https://github.com/Worlize/WebSocket-Node#usage-examples) – Ravi
@Ravi Он использует socket.io, а не ws. Socket.io обновляет соединение от опроса до websockets, если он поддерживается, поэтому вам нужно использовать библиотеку socket.io, которая находится в '/ socket.io/socket.io.js'. –