javascript - 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 协议,并且服务器必须能够使用该 webSocket 协议。如果没有,客户端将断开连接,因为服务器无法支持正确的协议。
NPM 中有多个用于 node.js 的 websocket 服务器库。选择其中一个并将其添加到您的服务器。如果您的服务器也打算用作常规 http 服务器,您可以与 websocket 服务器共享同一个 http 服务器。webSocket 服务器代码将检查每个传入的请求,并挑选出那些表明它们代表 webSocket 连接启动的请求,然后从那里接管它们。
为了让您了解 webSocket 服务器必须做什么,您可以查看这篇关于编写 websocket 服务器的文章。我不是建议你自己编写(在协议细节上花费了太多时间),但这肯定会解释为什么普通的 http 服务器不能满足 webSocket 连接。
推荐阅读
- c++ - 一次包含多个头文件,只有一个#include-expression?
- terraform - Terraform Vm Provision 附加 2 NIC
- python - 计算列中出现的频率
- ssl - 无法在 apache 2.4 服务器上激活文本压缩
- javascript - 在 OnStart() 函数中更新变量的值
- javascript - Flexbox 页脚在移动设备上未正确定位
- python - 如何修复 Python 的 vk_api 中的“'int' object is not subscriptable”错误
- ios - 这些常量在对齐工具中意味着什么?
- java - JLabel 不会在课堂上显示图像
- javascript - 单击发布链接以在另一页面上显示完整结果