deepstream 错误监听 EADDRINUSE 127.0.0.1:6020
deepstream error listen EADDRINUSE 127.0.0.1:6020
我尝试从 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();
我找到的一个解决方案是传递空配置对象,而不是:
const server = new DeepStreamServer({
host:'localhost',
port:3003
})
我正在使用这个:
const server = new DeepStreamServer({})
现在一切正常。
在 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] 时指向该文件。
以下为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 文件相同的结构。有时有点不同的命名。 typescript 声明文件或类型为我们指明了方向。使用像 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 中不受支持(文档未更新)。
我尝试从 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();
我找到的一个解决方案是传递空配置对象,而不是:
const server = new DeepStreamServer({
host:'localhost',
port:3003
})
我正在使用这个:
const server = new DeepStreamServer({})
现在一切正常。
在 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] 时指向该文件。
以下为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 文件相同的结构。有时有点不同的命名。 typescript 声明文件或类型为我们指明了方向。使用像 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 中不受支持(文档未更新)。