测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | 自定义 |
发布最后发布 | 2017年4月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由Jim Arnell维护。
使用 NSURLSession 编写的 Swift 的 SSE 客户端。
这是一个尝试将 API 尽可能保持与 JavaScript 相似的 Swift 编写的 EventSource 实现。基于W3C EventSource 编写。如果有遗漏或不完全正确的地方,请提出问题,我会处理它!
它与 JavaScript 版本的功能一样,主要区别在于创建新的 EventSource 对象时,您可以添加请求头,例如,如果您的服务器使用基本认证,您可以在那里添加头。
Last-Event-Id
由库完全处理,因此如果连接断开需要重新连接时,它会发送到服务器。此外,Last-Event-Id
存储在 NSUserDefaults
中,因此我们可以保存最后接收的事件,以便下次使用应用程序时避免接收重复的事件。
如果连接断开,库会自动重新连接。重新连接时间为 3 秒。此时间可以通过服务器发送的 retry: time-in-milliseconds
事件来更改。
您还可以在 sse-server
文件夹中找到一个非常简单的 node.js
服务器来测试库。要运行服务器,只需
npm install
node sse.js
您可以直接将 EventSource.swift
文件拖放到项目中或使用 CocoaPods。
pod 'IKEventSource'
然后导入库
import IKEventSource
var eventSource = new EventSource(server);
eventSource.onopen = function() {
// When opened
}
eventSource.onerror = function() {
// When errors
}
eventSource.onmessage = function(e) {
// Here you get an event without event name!
}
eventSource.addEventListener("ping", function(e) {
// Here you get an event 'event-name'
}, false);
eventSource.close();
var eventSource: EventSource = EventSource(url: server, headers: ["Authorization" : basicAuthAuthorization])
eventSource.onOpen {
// When opened
}
eventSource.onError { (error) in
// When errors
}
eventSource.onMessage { (id, event, data) in
// Here you get an event without event name!
}
eventSource.addEventListener("event-name") { (id, event, data) in
// Here you get an event 'event-name'
}
eventSource.close()
我们添加了以下方法,这些方法在 JavaScript EventSource API 中不可用,但我们认为它们可能很有用
public func removeEventListener(event: String) -> Void
public func events() -> Array<String>
以下属性也可用
事件:
id: event-id
event: event-name
data: event-data
调用
eventSource.addEventListener(event-name
) { (id, event, data) in
// Here you get an event 'event-name'
}
事件:
id: event-id
data: event-data
data: event-data
调用
eventSource.onMessage { (id, event, data) in
// Here you get an event without event name!
}
事件:
id: event-id
data: event-data-1
data: event-data-2
data: event-data-3
调用
eventSource.onMessage { (id, event, data) in
// Here you get an event without event name!
// data: event-data-1\nevent-data-2\nevent-data-3
}
事件:
:heartbeat
调用
nothing it's a comment
这是应用程序附带的示例。如果您运行服务器和应用程序,您将能够看到这个示例的实时效果。移动的箱子的作用只是展示所有功能均可后台运行,主线程性能没有下降。(GIF 图像看起来不太好,但如果你点击图片,你会转到运行更加顺滑的 gfycat 版本)
感谢所有贡献者指出丢失的内容或问题,并修复这些问题或提出问题!!
关于使用本库的任何< Kittchen>疑问或< strong>一般性评论,请使用我们的公共 hipchat 房间。
如果您在使用本库时发现任何< strong>错误或遇到任何< strong>问题,请在此存储库(或拉取请求 :))中提出问题。
您可以在inaka.github.io查看我们的所有开源项目