Node.js中的Websocket连接在发送时关闭

时间:2016-09-28 14:52:43

标签: node.js windows websocket npm send

我尝试了许多不同的npm Web套接字库(WebSocket,ws,express-ws等),并且在其中的每个人中我都遇到了同样的问题。当我尝试发送websocket消息时,连接关闭。 我没有问题收到消息,只发送。

以下是使用express和ws库进行一次测试的一个简单示例: Node.JS方面:

var server = require('http').createServer()
  , url = require('url')
  , WebSocketServer = require('ws').Server
  , wss = new WebSocketServer({ server: server })
  , express = require('express')
  , app = express()
  , port = 8080
  , fs = require('fs');

app.use(function (req, res) {
  var index = fs.readFileSync('./interface/index.html');
  res.end(index);
});

wss.on('connection', function connection(ws) {
  var location = url.parse(ws.upgradeReq.url, true);
  console.log('open ws');
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    ws.send('test back');
  });

  ws.on('close', function () {
    console.log('ws connection closed.');
  })
});

server.on('request', app);
server.listen(port, function () { console.log('Listening on ' + server.address().port) });

和浏览器端(“./interface/index.html”):

window.WebSocket = window.WebSocket || window.MozWebSocket;
var port = 8080;
var ip = window.location.hostname;
var connection;

connection = new WebSocket('ws://' + ip + ':' + port);

connection.onopen = function () {
  // connection is opened and ready to use
  console.log('Web socket connection with', ip + ':' + port);
  //sendQueue(msgQueue);

};

connection.onerror = function (error) {
  // an error occurred when sending/receiving data
  console.log('Web socket erorr with', ip + ':' + port + ':', error);
};

connection.onmessage = function (message) {
  // try to decode json (I assume that each message from server is json)
  console.log("Received ws");
  // handle incoming message
};

connection.onclose = function (){
  console.log("Web socket connection lost.");
};

function sendws() {
  connection.send("test");
  console.log("sent ws");
  return false;
}
<head>
  <meta charset="utf-8">

  <title>Simple Web Socket test</title>
  <!--<meta name="description" content="Simple Web Socket">-->
  <meta name="author" content="Binoman">

  <link rel="stylesheet" href="css/styles.css?v=1.0">

  <!--[if lt IE 9]>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
  <![endif]-->
</head>

<body>
  <button type="button" name="button" onclick="sendws()">Send</button>
</body>

我不知道为什么会这样。我将Node.js更新为6.7。 在Windows 10上运行。 我很感激帮助! 谢谢!

1 个答案:

答案 0 :(得分:1)

我发现是我的防病毒网络保护阻止了连接。我为我的localhost地址做了一个例外,它现在运行得很好。