如何将WebSockets集成到Cocoa应用程序中

12
我正在开发一款涉及聊天元素的Cocoa应用程序。我考虑采用Websockets来处理客户端和服务器之间的通信,因为这样可以轻松实现网站上显示聊天记录。所以我的问题是:能否在WebView元素中使用Websockets呢?(我知道Safari还不支持Websockets,所以我想这是不可能的)。如果不行,是否有适用于C、Objective C或其他语言的Websocket客户端库可以嵌入到我的应用程序中呢?欢迎提出建议。
5个回答

18

目前唯一支持最新标准RFC 6455(撰写本篇文章时)的Objective-C WebSocket库是SocketRocket(声明:我是它的作者)。

Unitt和Zimt的客户端实现都使用已弃用的协议,并且似乎没有得到维护。


CoreWebSocket 怎么样?它的名字很好听,而且由于它有 C API,所以似乎很快。在我看到这个之前,我创建了一个问题 CoreWebSocket Vs. SocketRocket - ma11hew28

3

1
截至2012年11月,zimt已被其作者弃用,推荐使用SocketRocket代替zimt。请使用SocketRocket。 - Jeremy W. Sherman
应该取消JeremyW.Sherman的"已接受"标志,并将其加到mikelikespie的答案上。 - anddam

0

在我的项目中无法使用zimt或UnitT,因此我编写了这个快速包装器,围绕uiwebview使用iOS 4.2中支持的本机WebSockets。

https://github.com/zootreeves/iOS-WebSockets/

对于小型消息,性能足够。


你在使用UnitT时遇到了什么问题?我很乐意解决任何问题。 - Josh Morris
Josh,我已经构建了UnitT并将libUnittWebSocketClient.a导入到我的项目中。然后为了测试,我使用以下代码创建了一个WebSocket对象:socket = [[WebSocket alloc] initWithURLString:@"ws://ip:8080/" delegate:self origin:nil protocols:nil tlsSettings:nil verifyAccept:NO]; [socket open]; 但是我遇到了错误Open Error Domain=WebSocketErrorDomain Code=0 "The operation couldn’t be completed. Bad handshake" UserInfo=0x16c480 {NSLocalizedFailureReason=Bad handshake}。Websockets服务器是Jetty 8。这是在iOS 4.2上的情况。 - user75832
我想我找到了问题所在。您希望URL指向您的WebSocketServlet。我检查了项目testws,这是我用来针对Jetty 8.0.M2运行库单元测试的。我的websocket指向url,ws://<ip>:8080/testws/ws/test。我的web.xml具有以下片段:` <servlet> <servlet-name>TestWS</servlet-name> <servlet-class>com.unitt.testws.TestWebSocketServlet</servlet-class> </servlet> TestWS /ws/* `。这解决了问题吗? - Josh Morris

0

在编写C++ WebSocket库的问题(我的问题)中,warmcat提供了libwebsocket

它支持最新的-04和-05标准推荐,并提供通过SSL的加密。此外,它应该可以在iOS设备上工作。

如果您不介意使用C代码,或者您可以为该库编写Objective-C包装器,那么您可以使用它。


0

zimt 在 iOS4 上似乎无法工作 - 自 2010 年 4 月 2 日以来没有进行任何更改..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接