WebSocket无法连接

时间:2019-12-18 17:48:56

标签: javascript node.js websocket

我有一个正在尝试制造的WebSocket服务器,但我不知道为什么它没有连接。

index.html(客户端):

<p id="status">Connecting...</p>
<input id="message" />
<button id="submit">Send</button>
<script>
  var s = new WebSocket("wss://StarliteServer.cs641311.repl.run:8000", ["soap", "wamp"]);
  s.onopen = function() {
    document.getElementById("status").innerHTML="Connected";
  }
  document.getElementById("submit").addEventListener("click", function() {
    s.send(document.getElementById("message").value);
  });
  s.onmessage = function(e) {
    alert(e.data);
  }
  s.onclose = function(e) {
    document.getElementById("status").innerHTML = "ERROR: "+e.code
  }
</script>

app.js

var http = require('http');
http.createServer(function(req, res) {
  req.onopen = function() {
    console.log("OPENING CONNECTION");
    res.writeHead(200);
  }
  req.on('data', function(e) {
    res.write(e);
  });
  req.on('close', function() {
    console.log('CONNECTION CLOSED');
  });
}).listen(8000);

1 个答案:

答案 0 :(得分:1)

一个websocket客户端需要一个websocket服务器才能连接。尽管所有的webSocket连接都以纯HTTP请求开头,但是服务器必须随后将连接“升级”到webSocket协议,并且服务器必须能够使用该webSocket协议。否则,由于服务器无法支持正确的协议,客户端将断开连接。

NPM中有多个用于node.js的websocket服务器库。选择其中之一并将其添加到您的服务器。如果您的服务器还打算用作常规的http服务器,则可以与websocket服务器共享同一http服务器。 webSocket服务器代码将检查每个传入的请求,并挑选出表明它们代表webSocket连接启动的请求,并将从那里接管它们。

要让您了解webSocket服务器必须执行的操作,您可以看到此article on writing websocket servers。我不建议您自己编写(在协议详细信息上花费太多时间),但这肯定可以解释为什么普通的http服务器不足以实现webSocket连接。