问题标签 [kitura]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1200 浏览

swift - 使用服务器端 Swift 连接到 Oracle 数据库

是否有可能在 Linux 上使用 Swift(原始或 Swift 框架)连接到 Oracle 数据库?我所做的是尝试构建一个 Docker VM,安装 Oracle 二进制文件,添加 OCILIB 包,然后使用一个名为 SwiftOracle 的包连接 [已尝试],这似乎不受支持(很多构建问题)并且只是将 OCILIB C 代码暴露给Swift 使用模块映射和包装器。

我使用 Kitura 框架进行了尝试,但似乎都不起作用 - Xcode 无法编译,因为它既无法找到 C 库也无法创建模块。

以下是我尝试无济于事的步骤:

构建 Docker VM(包括 Oracle 二进制文件):https ://github.com/wnameless/docker-oracle-xe-11g

下载并安装 OCILIB:https ://github.com/vrogier/ocilib

添加 SwiftOracle 包,修复构建问题并尝试构建。

0 投票
2 回答
258 浏览

swift - 如何运行swift服务器单进程

我正在尝试在 Ubuntu 上使用 Kitura 运行基于 swift 的 Web 服务器。这是启动 hello word 服务器的以下命令。 .build/debug/helloworld 我可以使用启动独立进程,.build/debug/helloworld & 但如果再次执行,则使用该进程启动会创建多个进程。或者我必须杀死旧进程然后启动新进程如果我只想运行单个进程。

我已经按照以下教程让服务器运行起来。但是不想使用 Bluemix 来部署应用程序。相反,我想在 AWS ubuntu 上启动它。 http://www.kitura.io/en/starter/gettingstarted.html

我认为必须有更简单和正确的方法来做到这一点。

如您所见,我几乎是服务器的新手。

0 投票
1 回答
321 浏览

javascript - Swift 中的 === 和 !== 是什么?和 JS 中的一样吗?

我正在尝试将 js 代码转换为 swift (两者都是新的)。我发现在 js 中他们使用 === 将 json 值与字符串进行比较。

有人可以帮我在swift(3.0)中找到===的含义,它是否也像JS一样做同样的操作?我在 js 中找到的用法 -

0 投票
1 回答
135 浏览

swift - 无法使用带有 Swift 3.1 的 Postgres 适配器构建 Kitura 服务器

我目前正在尝试构建一个访问 Postgres 数据库的示例 Kitura 服务器。github 中有几个示例项目,最初由 IBM 发布。但是顶部有一个很大的评论说他们不再支持这个项目。

我正在使用的当前项目是 TodoList-SWiftKuery

如说明中所述,我克隆项目并输入构建命令

swift build

链接步骤失败......这是事情开始失败时的控制台日志。当它开始变得多余时,我会剪掉它。

我的基本问题是如何解决这个问题!

但一个具体的引入问题是,旧的 Swift 2.0 库等在哪里libswiftDispatch.dylib。指定的?我在哪里可以纠正这个。它不在包管理器文件中。

帮助或指向其他文档的指针将不胜感激。

0 投票
1 回答
36 浏览

kitura - 如何将计算结果传递给多个 Kitura 处理程序块?

由于我们可以从路由器获取请求中调用多个处理程序,我们如何将第一个处理程序中计算的结果传递给下一个处理程序块?

0 投票
1 回答
756 浏览

swift - 从 AWS EC2 下载到 iOS 应用程序时出现超时问题

我有一个用 Swift 编写的自定义服务器,使用 Kitura ( http://www.kitura.io ),在 AWS EC2 服务器上运行(在 Ubuntu 16.04 下)。我使用 CA 签名的 SSL 证书 ( https://letsencrypt.org ) 对其进行保护,因此我可以使用 https 从客户端连接到服务器。客户端在 iOS (9.3) 下本机运行。我在 iOS 上使用 URLSession 连接到服务器。

当我对 iOS 客户端进行多次大型下载时,我遇到了客户端超时问题。超时看起来像:

错误域=NSURLErrorDomain 代码=-1001 “请求超时。” UserInfo={NSErrorFailingURLStringKey=https://, _kCFStreamErrorCodeKey=-2102, NSErrorFailingURLKey=https://, NSLocalizedDescription=请求超时。, _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x7f9f23d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null) " UserInfo={_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102}}}

在服务器上,超时总是发生在代码中的同一个地方——它们会导致特定的服务器请求线程阻塞并且永远不会恢复。超时发生在服务器线程调用 KituraRouterResponse end方法时。即,服务器线程在调用此end方法时会阻塞。鉴于此,客户端应用程序超时也就不足为奇了。此代码是开源的,因此我将链接到服务器阻塞的位置:https ://github.com/crspybits/SyncServerII/blob/master/Server/Sources/Server/ServerSetup.swift#L146

失败的客户端测试是:https ://github.com/crspybits/SyncServerII/blob/master/iOS/Example/Tests/Performance.swift#L53

我不是从 Amazon S3 之类的东西下载的。数据是从另一个 Web 源在服务器上获取的,然后通过 https 从运行在 EC2 上的服务器下载到我的客户端。

例如,下载 1.2 MB 数据需要 3-4 秒,当我尝试连续下载 1.2 MB 数据中的 10 次时,其中 3 次超时。使用 HTTPS GET 请求进行下载。

有趣的是,首先进行这些下载的测试会上传相同数据大小的数据。即,它以 1.2 MB 的大小进行 10 次上传。我没有看到这些上传的超时失败。

我的大多数请求有效,所以这似乎不仅仅是安装不正确的 SSL 证书的问题(我已经使用https://www.sslshopper.com进行了检查)。iOS 端的 https 设置不当似乎也不是问题,我NSAppTransportSecurity在我的应用程序 .plist 中使用亚马逊的推荐进行了设置(https://aws.amazon.com/blogs/mobile/preparing-your- ios-9/ 应用程序)。

想法?

更新 1 : 我刚刚在本地 Ubuntu 16.04 系统上运行我的服务器并使用自签名 SSL 证书进行了尝试——其他因素保持不变。我遇到了同样的问题。因此,很明显这与 AWS无关。

更新 2: 服务器在本地 Ubuntu 16.04 系统上运行,并且不使用 SSL(服务器代码中只有一行更改以及在客户端中使用 http 而不是 https),问题存在。下载成功发生。因此,很明显这个问题确实与 SSL 有关。

Update3: 服务器在本地 Ubuntu 16.04 系统上运行,并再次使用自签名 SSL 证书,我使用了一个简单的curl客户端。为了尽可能模拟我一直在使用的测试,我中断了现有的 iOS 客户端测试,就像它开始下载一样,并使用我的客户端重新启动curl——它使用服务器上的下载端点下载相同的 1.2MB 文件 20 次。错误没有复制。我的结论是问题源于 iOS 客户端和 SSL 之间的交互。

Update4: 我现在有一个更简单的 iOS 客户端版本来重现该问题。我将在下面复制它,但总而言之,它使用URLSession's 并且我看到相同的超时问题(服务器正在使用自签名 SSL 证书在我的本地 Ubuntu 系统上运行)。当我禁用 SSL 使用(http 并且服务器上没有使用 SSL 证书)时,我没有得到问题。

这是更简单的客户端:

// 在名为“Download.swift”的文件中:

更新5: 哇!我现在正朝着正确的方向前进!我现在有一个使用 SSL/https 的更简单的 iOS 客户端,并且不会导致此问题。@Ankit Thakur 建议进行更改:我现在使用URLSessionConfiguration.background而不是URLSessionConfiguration.default,这似乎是使它起作用的原因。我不知道为什么。这是否代表一个错误URLSessionConfiguration.default?例如,我的应用程序在我的测试期间没有明确进入后台。另外:我不确定如何或是否能够在我的客户端应用程序中使用这种代码模式 - 似乎这种使用URLSession's 不允许您httpAdditionalHeaders在创建 URLSession 后更改。看来 的意图URLSessionConfiguration.backgroundURLSession应该在应用程序的生命周期内存在。这对我来说是个问题,因为我的 HTTP 标头可以在应用程序的单次启动期间更改。

这是我的新 Download.swift 代码。我更简单的示例中的其他代码保持不变:

Update6: 我现在看到了如何处理 HTTP 标头的情况。我可以只使用allHTTPHeaderFieldsURLRequest 的属性。情况应该基本解决了!

Update7: 我可能已经弄清楚为什么后台技术有效:

如果原始请求因超时而失败,后台会话创建的任何上传或下载任务都会自动重试。

https://developer.apple.com/reference/foundation/nsurlsessionconfiguration/1408259-timeoutintervalforrequest

0 投票
1 回答
557 浏览

swift - Swift Package Manager 无法解析 1.4 以上的 Kitura 版本

我正在尝试在服务器上使用示例 Swift(使用 Kitura)应用程序并使用 swift 包管理器来解决依赖关系。

这是我的示例Package.swift文件。

我的问题是,如果我将 Kitura 框架的次要版本更改为 4 以上,我会收到错误消息error: unsatisfiable。虽然 1.7.1 是最新的 Kitura 版本但swift build并没有解决它。

任何人都知道它为什么会这样?

0 投票
2 回答
206 浏览

swift - 将域指向在 OS X 服务器上运行的 Web 应用程序(例如 Kitura、完美、蒸汽服务器)

使用 OS X 服务器应用程序,我可以将多个域指向不同的网站。所有域都可以同时使用端口 80,OS X 将解析使用哪个网站。

当我启动我的 kitura 服务器时(我想 Vapor 和 Perfect 也会发生同样的情况),我必须在空闲端口(例如 8080)上启动它。如果我从 80 开始,它会与网站产生冲突,并且可能不会接听我的电话。

设置 Kitura 以便端口 80 与其他服务一起使用的正确方法是什么?

我使用以下命令启动 kitura 服务器:

我在日志上得到以下信息:

0 投票
1 回答
94 浏览

swift - Kitura REST API 速率限制器

我正在尝试使用 Kitura 以 Swift 语言构建 REST API。Kitura 中是否有任何 API 速率限制中间件或可以以任何方式实现速率限制?

0 投票
1 回答
105 浏览

swift - 为什么 Swift Kitura 服务器没有终止某些线程?

我在运行的 Swift 服务器上遇到了一些可重现的问题。这是一个多线程服务器,使用 Kitura。基础是:服务器运行一段时间后,下载请求开始需要客户端重试(通常重试三次)。来自客户端的尝试导致服务器线程未终止。在服务器上,下载问题在日志中显示如下:

然后请求永远不会终止。

我的服务器中的相关片段代码如下所示:

也就是说,服务器显然似乎挂起对end(Kitura 方法)的调用。另请参阅https://github.com/crspybits/SyncServerII/blob/master/Sources/Server/Setup/RequestHandler.swift#L105

就在上次出现此问题之前,我在服务器日志中观察到以下内容:

我不确定这是从哪里来的,因为我不确定我的一个客户是否正在生成这个。我没有用“/”明确地向我的服务器发出请求。(我偶尔会看到不是我的客户端向我的服务器发出的请求——这可能就是其中之一)。请注意,除了其中一条日志消息之外的所有日志消息都来自 Kitura,而不是直接来自我的代码。我的日志消息是[INFO] REQUEST RECEIVED: /.

如果我是一个赌徒,我会说上面的错误使我的服务器进入一种状态,之后我会看到这种下载/重试行为。

此时我唯一的解决方案是重新启动服务器。从那时起,问题不会立即发生。

想法?