【问题标题】:SocketCluster Client -- TypeError: WebSocket is not a constructorSocketCluster 客户端——TypeError:WebSocket 不是构造函数
【发布时间】:2019-09-02 17:27:36
【问题描述】:

我是 javascript 新手,正在尝试开发一个 react.js 应用程序,包括通过 socketcluster 框架进行通信。客户端不应在浏览器中运行,而应在后台单独的 javascript 文件中运行。

为了实现这一点,我为服务器 (https://github.com/SocketCluster/socketcluster) 和客户端 (https://github.com/SocketCluster/socketcluster-client) 安装了必要的模块。

我按照说明操作,服务器和客户端之间的通信(嵌入在 html 中的 javascript 代码,在浏览器中运行)正常工作。但是,当我尝试使用“node gbam-client.js”在单独的 javascript (gbab-client.js) 文件中运行客户端时,它没有。 非常感谢您的帮助!

gbab-client.js 的内容:

const socketClusterClient = require('socketcluster-client/socketcluster');

const options = {
    port: 2222
};

// Initiate the connection to the server
const socket = socketClusterClient.connect(options);
console.log('Connecting...');

socket.on('connect', function () {
    console.log('CONNECTED');
});

// Listen to an event called 'rand' from the server
socket.on('rand', function (num) {
    console.log('RANDOM: ' + num);
});

错误信息:

$ node gbam-client.js


C:\...\node_modules\socketcluster-client\socketcluster.js:1306
    return new WebSocket(uri, null, options);
           ^

TypeError: WebSocket is not a constructor
    at createWebSocket (C:\...\node_modules\socketcluster-client\socketcluster.js:1306:12)
    at new SCTransport (C:\...\node_modules\socketcluster-client\socketcluster.js:1337:18)
    at SCClientSocket.connect.SCClientSocket.open (C:\...\node_modules\socketcluster-client\socketcluster.js:558:22)
    at new SCClientSocket (C:\...\node_modules\socketcluster-client\socketcluster.js:433:10)
    at Object.create (C:\...\node_modules\socketcluster-client\socketcluster.js:198:31)
    at Object.module.exports.create (C:\...\node_modules\socketcluster-client\socketcluster.js: 14:18)
    at Object.<anonymous> (C:\...\gbam-client.js:12:36)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)

更新:

我找到了解决方案。 require 的目的地不对。

这是更正后的代码 (gbam-client.js):

const socketClusterClient = require('socketcluster-client');

const options = {
    hostname:'localhost',
    port: 2222
};

...

【问题讨论】:

  • 为了测试,我写了一个 websocket 服务器和客户端。它工作正常。他们可以交流。

标签: javascript node.js reactjs websocket socketcluster


【解决方案1】:

可能你的ws(WebSocket库)版本不兼容socketcluster,尝试更新一下WS

【讨论】:

  • 我更新了我的所有模块,但它不起作用...(两个模块没有更新:express 和 serve-static)
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2017-08-02
  • 2018-02-11
相关资源
最近更新 更多