开发者问题收集

JavaScript——ReferenceError:WebSocket 未定义

2017-04-09
77590

仅关注客户端 API(因为每种服务器端语言都有自己的 API),以下代码片段打开连接,为连接、断开连接和消息事件创建事件侦听器,将消息发送回服务器,并使用 WebSocket 关闭连接。

// Create a socket instance
var socket = new WebSocket('ws://localhost:3000');

// Open the socket
socket.onopen = function(event) {

    // Send an initial message
    socket.send('I am the client and I\'m listening!');

    // Listen for messages
    socket.onmessage = function(event) {
        console.log('Client received a message',event);
    };

    // Listen for socket closes
    socket.onclose = function(event) {
        console.log('Client notified socket has closed',event);
    };

    // To close the socket....
    socket.close()

};

但是我在执行上述代码片段时收到错误:

ReferenceError: WebSocket is not defined

我已经浏览了各种链接,例如 https://davidwalsh.name/websocket ,了解如何实现 WebSockets。但它们都没有导入任何 npm 包

问题: 那么,如何实现 WebSockets(客户端 AngularJS)?我在这里遗漏了什么?

3个回答

尝试

const WebSocket = require('ws');
var socket = new WebSocket('ws://localhost:3000');

然后

npm i ws

并重试。它适用于我的情况

PaPu
2018-08-27

我把这个留在这里,是为了那些在节点应用程序中使用 @stomp/stompjs 包时遇到问题的人。

添加此行:

Object.assign(global, { WebSocket: require('ws') });

另外,不要忘记 npm install ws

Vlad Lego
2021-07-07

当您尝试运行 JavaScript 时,通常在浏览器或 NodeJS 中运行它。

浏览器和 NodeJS 是不同的 JavaScript 运行时。

WebSocket 本身是一种应用层协议,您需要使用 API 来使用它。

目前(2019 年 12 月 5 日),

大多数浏览器都支持 WebSocket API 供开发人员使用 WebSocket。

NodeJS 不提供任何 OOTB API 供开发人员使用 WebSocket,您需要第三方库才能使用 WebSocket(例如 https://github.com/websockets/ws )。

您遵循的示例是在浏览器中使用 WebSocket API。

希望对您有所帮助。

Ethan
2019-12-05