SocketRocket 0.7.0

SocketRocket 0.7.0

测试已测试
Lang语言 Obj-CObjective C
许可证 NOASSERTION
发布最后发布2023年6月

Nikita LutsenkoFacebook, Inc. 维护。



  • By
  • Nikita Lutsenko, Dan Federman 和 Mike Lewis

SocketRocket

Platforms License

Podspec Carthage Compatible

Build Status

适用于 iOS、macOS 和 tvOS 的符合 WebSocket (RFC 6455) 的客户端库。

SocketRocket 的测试结果在这里。您可以在这里与现代浏览器的结果进行比较。

SocketRocket 目前符合 Autobahn 核心测试的所有 ~300 条模糊测试(除了两个 UTF-8 测试 6.4.2 和 6.4.4,它只是非严格测试)。

特性/设计

  • 支持 TLS (wss),包括自签名证书。
  • 性能看起来相当好。
  • 支持 HTTP 代理。
  • 支持 IPv4/IPv6。
  • 支持 SSL 证书固定。
  • 发送 ping 并可以处理 pong 事件。
  • 异步和非阻塞。大部分工作都在后台线程上完成。
  • 支持 iOS、macOS、tvOS。

安装

有几种选择。选择一个,或者随便按你的想法做

将以下行添加到您的 Podfile 中

pod 'SocketRocket'

运行 pod install,设置完成。

将以下行添加到您的 Cartfile 中

github "facebook/SocketRocket"

运行 carthage update,现在您的 Carthage 文件夹中应该有最新版本的 SocketRocket

  • 作为子项目使用 SocketRocket

    您也可以将 SocketRocket 作为子项目包含在您的应用程序中,尽管我们不推荐这样做,因为这会显著增加您的索引时间。要这样做,只需将 SocketRocket.xcodeproj 文件拖放到您的工作区中。

API

SRWebSocket

WebSocket。

注意

-(void)open 期间和它关闭、出错或失败时,SRWebSocket 将保留自身。这与 NSURLConnection 的行为类似(与 NSURLConnection 不同,SRWebSocket 不会保留代理)。

接口

@interface SRWebSocket : NSObject

// Make it with this
- (instancetype)initWithURLRequest:(NSURLRequest *)request;

// Set this before opening
@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;

// Open with this
- (void)open;

// Close it with this
- (void)close;

// Send a Data
- (void)sendData:(nullable NSData *)data error:(NSError **)error;

// Send a UTF8 String
- (void)sendString:(NSString *)string error:(NSError **)error;

@end

SRWebSocketDelegate

您需要实现这一点

@protocol SRWebSocketDelegate <NSObject>

@optional

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string;
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data;

- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(nullable NSString *)reason wasClean:(BOOL)wasClean;

@end

测试

包括了Python测试环境的设置脚本。它包含vitualenv,因此所有依赖都在用户空间中安装。

要从命令行运行短测试,运行

  make test

要运行所有测试,运行

  make test_all

短测试不包括性能测试(实际的瓶颈是测试 harness,而不是 SocketRocket)。

第一次运行可能需要一些时间来安装依赖,之后将会很顺畅。

您还可以在 Xcode 中运行测试,它与上述方式相同,但更容易调试。

  • 选择 SocketRocketTests 目标
  • 确保运行目标为您的 Mac 或任何模拟器
  • 运行测试动作(《⌘+U》)

TestChat 演示应用程序

SocketRocket 包含一个演示应用程序 TestChat,它将在端口号 9900 上与监听websocket进行“聊天”。

TestChat 服务器

服务器接收一条消息并将其广播到所有已连接的客户端。

虽然需要一些依赖项才能运行,但我们还想重用我们在运行测试时创建的虚拟环境。如果您尚未运行测试,请在 SocketRocket 根目录中输入以下命令:

make test

这将配置您的 virtualenv

现在,在您的终端中

source .env/bin/activate
pip install git+https://github.com/tornadoweb/tornado.git

在同一个终端会话中,启动聊天室服务器

python TestChatServer/py/chatroom.py

还有一个 Go 实现版本(包括最新的每周版本),您可以在其中

cd TestChatServer/go
go run chatroom.go

聊天

现在,启动 TestChat.app(只需在 Xcode 项目中运行目标)。如果您已经启动了它,您可以按刷新按钮以重新连接。应该会在顶部显示“已连接!”

要与应用程序交谈,请打开浏览器到 http://localhost:9000 并开始聊天。

WebSocket 服务器实现建议

SocketRocket 与以下库一起使用:

Tornado 的实现非常简单,工作得很好。(IPython notebook 也使用它)。配置处理程序和路由比在 Autobahn/twisted 中要容易得多。

贡献

我们很高兴您对SocketRocket感兴趣,并期待看到您的成果。在提交Pull Request之前,请阅读我们的贡献指南