当前位置: 首页 > 知识库问答 >
问题:

在Javascript和Node中永远挂起的套接字状态

夹谷腾
2023-03-14
// client.js
const webSocket = new WebSocket('wss://127.0.0.1:8081');

webSocket.addEventListener('open', (message) => {
    alert(message);
})

const text = document.getElementById('text');
const button = document.getElementById('button');

button.onclick = () => {
    webSocket.send(text.value);
}
// server.js
import { Server } from 'net';

const server = new Server();

server.on('connection', (socket) => {
    console.log(socket);

    socket.on('data', (data) => {
     
    })
});

server.listen(8081, '127.0.0.1', () => {
    console.log('Server running at port 8081');
});

我面临的问题是:

    < li >当我加载页面时,服务器的控制台中会显示套接字(我可以获取远程地址和远程端口) < li >无论我做什么,客户端中的连接总是挂起。我尝试了Chrome、Brave、Mozilla和Safari,但似乎没有一个能用。

我错过了什么?我试图在连接准备好之前不发送消息,但我从未在我的PC中获得过该状态。即使我在没有事件的情况下建立onopen属性,客户端中的警报也不会弹出。

Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
    at button.onclick 

共有1个答案

伯庆
2023-03-14

webSocket客户端必须连接到webSocket服务器。webSocket是一种特定的连接算法(从超文本传输协议请求开始,然后切换到webSocket协议)和特定的数据格式。因此,webSocket客户端必须有一个webSocket服务器来连接。您的服务器是不支持webSocket连接的通用TCP服务器。

客户端将首先建立一个TCP套接字到您的服务器,然后通过该套接字发送一个超文本传输协议请求,然后它将坐在那里等待对它发送的超文本传输协议请求的适当响应。由于您的服务器从不发送该响应,它只会坐在那里等待,直到最终超时并关闭套接字。这就是为什么您会看到它被困在待处理状态。它仍在等待其余的webSocket连接序列发生,但它从来没有这样做过。

如果你想知道 webSocket 连接方案和数据格式是如何工作的,你可以在这里看到一个很好的描述。

相关StackOverflow答案:

WebSocket服务器架构如何工作?

WebSocket和普通套接字通信有什么区别?

websocket实现内部使用http协议吗?

webSocket连接方案概述

WebSocket服务器如何处理多个传入连接请求?

 类似资料:
  • 我对CloseableHttpClient管理的连接有问题。Spring服务管理纽约连接: 当执行不成功时,我的setPayment方法最多调用3次。有时在第一次执行后,我的方法挂起而没有响应。欢迎任何建议。

  • 问题内容: 我根本不是Java程序员。我尽力不惜一切代价避免使用它,但是(在学校的意义上)我必须在课堂上使用它。老师要求我们使用Socket(),BufferedReader(),PrintWriter()和其他各种东西,包括BufferedReader()的readLine()方法。 基本上,这就是我遇到的问题。该文档明确指出,readLine应该在输入流的末尾返回null,但这不是正在发生的事

  • 与marshall和unmarshall的读者和作者有争议。就是这样。这就是我如何向版画作者写东西的方式。 我是这样得到它的: 然后此解组操作将挂起。它没有给我任何东西,甚至没有例外。

  • 问题内容: 服务器重启后,docker看起来仍然活跃,但是所有命令(例如Ctrl + C)都将永远挂起。有什么事吗 问题答案: 原来实例的正常运行时间超过一年,安装了许多应用程序版本,文件夹中包含数百个显然是旧的废弃容器的项目。 我看到了在交互运行docker进行调试的命令的同时永久读取所有数据的过程。 我删除并重新安装了docker和容器在我的盒子上,问题已解决。 感觉就像我需要一个脚本,该脚本

  • 问题内容: 给定具有实验HTTP2支持的最新版本的Node.js: HTTP2服务器: 并对此提出了要求: 它只是挂起并最终说: 如果设置,则错误: 不知道出了什么问题以及为什么到了日志记录的地步。 如果我进入浏览器并访问https:// localhost:8443 ,然后单击警告消息,则它实际上会记录并成功发出请求。但是尚未能够使节点发出请求。 我想将其视为HTTP1服务器,因此不想使用HTT

  • 问题内容: 我知道在这里和互联网上已经创建了有关该主题的许多主题。但是,我真的无法就两个语句之间的区别得出最终的结论!我的意思是,尝试并尝试可以通过查询获得所需的所有结果,但是我真的无法完全控制刀具! 我正在考虑自己是一个非常优秀的程序员和一个非常出色的SQL-ista,对此我感到有些as愧… 这是一个例子: 我有一个包含网站页面的表格(“ web_page”) 具有类别(“类别”)的表格。 一个