深度错误听EADDRINUSE 127.0.0.1:6020

时间:2017-08-05 16:33:41

标签: deepstream.io

我尝试从this link运行我的第一个deepstream.io服务器但是我收到此错误:

enter image description here

错误:

CONNECTION_ERROR | Error: listen EADDRINUSE 127.0.0.1:3003
PLUGIN_ERROR | connectionEndpoint wasn't initialised in time
f:\try\deep\node_modules\deepstream.io\src\utils\dependency-
initialiser.js:96
throw error
^

Error: connectionEndpoint wasn't initialised in time
at DependencyInitialiser._onTimeout 
(f:\try\deep\node_modules\deepstream.io\src\utils\dependency-
initialiser.js:94:17)
at ontimeout (timers.js:386:14)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)

这是我的代码:

const DeepStreamServer = require("deepstream.io")
const C = DeepStreamServer.constants;
const server = new DeepStreamServer({
  host:'localhost',
  port:3003
})

server.start();

3 个答案:

答案 0 :(得分:4)

在deepstream 3.0中,我们发布了HTTP端点,默认情况下,它与我们的websocket端点一起运行。

因此,在配置的根级别传递port选项不再有效(它会覆盖HTTP和websocket端口选项,正如您在提供的屏幕截图中看到的那样,两个端点都在尝试从同一个港口开始。)

您可以按如下方式覆盖每个端口:

const deepstream = require('deepstream.io')

const server = new deepstream({
  connectionEndpoints: {
    http: {
      options: {
        port: ...
      }
    },
    websocket: {
      options: {
        port: ...
      }
    }
  }
})
server.start()

或者您可以在文件中定义配置,并在初始化deepstream [1]时指向该配置。

[1] deepstream server configuration

答案 1 :(得分:2)

以下所有都是4.2.2版(目前为最新版本)

我正在使用相同的端口或未找到配置文件错误。而且我使用的是打字稿,而我也没有注意输出目录和构建(当使用打字稿和构建时可能会出现问题)。我最终可以运行服务器。而且我有很多分析。

我检查了代码源,并且看到了如何加载配置

const SUPPORTED_EXTENSIONS = ['.yml', '.yaml', '.json', '.js']
const DEFAULT_CONFIG_DIRS = [
  path.join('.', 'conf', 'config'), path.join('..', 'conf', 'config'),
  '/etc/deepstream/config', '/usr/local/etc/deepstream/config',
  '/usr/local/etc/deepstream/conf/config',
]

DEFAULT_CONFIG_DIRS.push(path.join(process.argv[1], '..', 'conf', 'config'))
DEFAULT_CONFIG_DIRS.push(path.join(process.argv[1], '..', '..', 'conf', 'config'))

我也测试了不同的事物。这是我想出的:

  • 首先,如果我们在构造函数中不精确任何参数。默认目录中的配置将被加载。如果没有,则服务器无法运行。 可以放置配置的位置之一是./conf与服务器节点脚本位于同一文件夹中。

  • 第二,我们可以将配置精确化为字符串路径(构造函数中的参数)。 config.yml或受支持的扩展之一。这将允许服务器加载服务器配置以及permission.yml和users.yml配置。哪些也应该位于同一文件夹中。如果不在同一文件夹中,则加载将失败,因此权限插件将不会加载。用户配置也是如此。不会退回到默认值。

  • 第三,配置文件支持的扩展名是: yml,yaml,json,js

  • 在nodejs上下文中。如果没有严格要求。没有回退到某些默认配置。需要在默认文件夹之一中提供配置,也可以通过指定路径来提供该配置。或通过传递配置对象。如果未提供,所有可选选项将默认为某些值(下面有一个示例可以显示)。但是请知道,确定终点非常重要且必不可少。

  • 要精炼路径,我们需要精炼config.yml文件(服务器配置)的路径[示例:path.join(__dirname, './conf/config.yml')]。然后从相同的目录Permission.yml和users.yml中检索(扩展名可以是任何受支持的扩展名)。我们无法精确定位目录的路径,它将失败。

  • 我们可以在config.yaml中分别精确设置权限配置或用户配置的路径,如下所示:

# Permissioning example with default values for config-based permissioning
permission:
  type: config
  options:
    path: ./permissions.yml
    maxRuleIterations: 3
    cacheEvacuationInterval: 60000
  • 最后,我们可以传递一个对象来配置服务器,或者传递null作为参数并使用.set方法(我没有测试第二种方法)。为了配置服务器,我们需要遵循与yml文件相同的结构。有时会有一些不同的命名。打字稿声明文件或类型向我们展示了方式。使用像vscode这样的编辑器。即使我们不使用打字稿,我们也可以保持自动完成和类型定义。 与以前的版本等效的最简单的是:
const webSocketServer = new Deepstream({
    connectionEndpoints: [
        {
            type: 'ws-websocket',
            options: {
                port: 6020,
                host: '127.0.0.1',
                urlPath: '/deepstream'
            }
        }
    ]
});

webSocketServer.start();
  • 以上是新的语法和方式。
const server = new DeepStreamServer({
  host:'localhost',
   port:3003
})

^^^^^^^^已完全弃用,并且在版本4中不受支持(文档未更新)。

答案 2 :(得分:1)

我找到的一个解决方案是传递空配置对象,如此插入:

const server = new DeepStreamServer({
  host:'localhost',
   port:3003
})

我只是用这个:

 const server = new DeepStreamServer({})

现在一切正常。