javascript - WebSocket 未连接

标签 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>

应用程序.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);

最佳答案

一个 websocket 客户端需要一个 websocket 服务器来连接。虽然所有 webSocket 连接都以纯 http 请求开始,但服务器必须随后将连接“升级”到 webSocket 协议(protocol),并且服务器必须能够使用该 webSocket 协议(protocol)。否则,客户端将断开连接,因为服务器无法支持正确的协议(protocol)。

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

为了让您了解 webSocket 服务器必须做什么,您可以查看 article on writing websocket servers .我不是建议您自己编写(在协议(protocol)细节上花费了太多时间),但这肯定会解释为什么普通的 http 服务器不能满足 webSocket 连接。

关于javascript - WebSocket 未连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397583/

相关文章:

javascript - 试图将背景图像放在颜色之上

node.js - 如何测量使用 socket.io 内部传输的数据大小

python - 从 WebSocket 提取数据的最快方法

javascript - jquery:从ajax调用获取父元素

javascript - 为 armv7 编译 node.js v0.10.31 时出错

javascript - WebGL渲染忽略位置?

node.js - 如何使斜杠命令在 Slack 中的机器人上运行?

javascript - 无法通过 Mongoose 将 MongoDB Atlas 与 Node.js 连接

javascript - 移动 Safari 上 JavaScript websocket 中的明显阻塞行为

c# - 从 OnOpen 事件发送时未收到消息