EventSource 1.0.4

EventSource 1.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年1月

Neil Cowburn维护。



  • 作者:
  • Neil Cowburn

iOS和Mac的服务器发送事件

Travis

它做什么?

它在您的Cocoa应用和Web服务器之间创建一个长期的单向HTTP通道,以便您的应用程序可以接收来自服务器的事件。

监听命名事件

通过下面的addEventListener:handler:方法订阅一个命名事件,如下所示:

NSURL *serverURL = [NSURL URLWithString:@"http://127.0.0.1:8000/"];
EventSource *source = [EventSource eventSourceWithURL:serverURL];
[source addEventListener:@"hello_event" handler:^(Event *e) {
    NSLog(@"%@: %@", e.event, e.data);
}];

它很简单,对于任何见过服务器发送事件JavaScript代码的人来说都很熟悉。

监听所有事件

有一个onMessage:方法将接收来自服务器所有的消息事件。

NSURL *serverURL = [NSURL URLWithString:@"http://127.0.0.1:8000/"];
EventSource *source = [EventSource eventSourceWithURL:serverURL];
[source onMessage:^(Event *e) {
    NSLog(@"%@: %@", e.event, e.data);
}];

监听连接状态的变化

此外,还有一些接收连接状态事件的onOpen:onError:、和onReadyStateChanged:方法。

NSURL *serverURL = [NSURL URLWithString:@"http://127.0.0.1:8000/"];
EventSource *source = [EventSource eventSourceWithURL:serverURL];
[source onError:^(Event *e) {
    NSLog(@"ERROR: %@", e.data);
}];

除了onError:之外,这些事件的事件eventdata属性将会是null。请检查事件对象的readyState属性。

优雅的连接处理

重连尝试是自动和无缝的,即使服务器进行了关闭。重连尝试的频率由服务器通过在其事件中设置retry键来控制。

服务器代码

这是一个简单的Node.js应用,它将生成服务器发送事件。事件每秒创建一次。

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, { 'Transfer-Encoding': 'chunked', 'Content-Type': 'text/event-stream' });

    setInterval(function() { 
        var now = new Date().getTime();
        var payload = 'event: hello_event\ndata: {"message":"' + now + '"}\n\n'; 
        res.write(payload); 
    }, 1000);
}).listen(8000);

上述负载不包括id参数,但是如果您包含一个,它将在您的Cocoa代码中的Event对象中可用。

还有一个简单的Go服务器发送事件服务器

安装

开始的最简单方法是使用Carthage。只需将以下行添加到您的Cartfile,然后从您的终端运行carthage update

github "neilco/EventSource"

如果您更喜欢CocoaPods,请将其添加到您的Podfile中,然后从您的终端运行pod install

pod 'EventSource'

否则,只需将EventSource目录的内容手动添加到项目中。

其他部分

联系方式

我在GitHub上是 @neilco,在Twitter上是 @neilco

许可协议

MIT许可协议

版权所有 (c) 2013 Neil Cowburn (http://github.com/neilco/)

任何人可以免费获得此软件及其关联文档的副本(“软件”),无需限制地使用软件,包括但不仅限于使用、复制、修改、合并、发布、分发、再许可和/or 销售软件副本,并允许提供软件的人进行上述行为,前提是遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何形式的保证,明示或暗示,包括但不限于适用性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者不对因合同、侵权或任何其他行为而产生的任何索赔、损害或其他责任承担责任,无论是来自、出于或与软件或其使用或其他操作相关。