【问题标题】:deepstream error listen EADDRINUSE 127.0.0.1:6020deepstream 错误监听 EADDRINUSE 127.0.0.1:6020
【发布时间】:2017-08-05 16:33:40
【问题描述】:

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

错误:

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();

【问题讨论】:

    标签: deepstream.io


    【解决方案1】:

    在 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

    【讨论】:

      【解决方案2】:

      我发现的一个解决方案是传递空配置对象,这样插入:

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

      我只是用这个:

       const server = new DeepStreamServer({})
      

      现在一切正常。

      【讨论】:

        【解决方案3】:

        以下所有内容均适用于版本 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 不支持(文档未更新)。

        【讨论】:

          猜你喜欢
          • 2016-09-16
          • 2018-07-04
          • 2014-01-17
          • 2016-07-12
          • 2014-12-11
          • 1970-01-01
          • 2018-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多