如何将 WebSockets 合并到 Cocoa 应用程序中[关闭]
Posted
技术标签:
【中文标题】如何将 WebSockets 合并到 Cocoa 应用程序中[关闭]【英文标题】:How to incorporate WebSockets into a Cocoa application [closed] 【发布时间】:2010-04-18 21:18:40 【问题描述】:我正在开发一个涉及聊天元素的 Cocoa 应用程序。我考虑过的一种方法是使用 Websockets 来处理客户端-服务器通信。这将是特别理想的,因为聊天也将显示在网站上,并且使用 Websockets 可以使实现变得非常简单。
那么:是否可以使用 WebView 元素,并在其中使用 Websockets? (我知道 Safari 还不支持 Websockets,所以我想这是不可能的?)
如果没有,是否有任何适用于 C、Objective C 或任何其他语言的 Websocket 客户端库我可以成功嵌入到我的应用程序中?
欢迎提出建议。
【问题讨论】:
【参考方案1】:唯一支持最新标准的objective-c WebSocket 库RFC 6455(在撰写本文时)是SocketRocket(免责声明:我是它的作者)。
Unitt 和 Zimt 的客户端实现都在使用已弃用的协议,似乎没有得到维护。
【讨论】:
CoreWebSocket 怎么样?它有一个好名字,而且看起来很快,因为它有一个 C API。我在看到这个之前创建了一个问题CoreWebSocket Vs. SocketRocket。【参考方案2】:这里是objective-c的websockets实现
http://github.com/esad/zimt
【讨论】:
截至 2012 年 11 月,zimt has been deprecated by its author 支持 SocketRocket。请使用它而不是 zimt。 JeremyW.Sherman 所说的。此外,应从该标志中删除“已接受”标志并添加到 mikelikespie 的标志中。【参考方案3】:warmcat 提供了 libwebsocket 作为 C++ Websocket 库的 my question 的答案。
它支持最新的 -04 和 -05 标准推荐,还通过 SSL 提供加密。 此外,它应该可以在 ios 设备上运行。
如果您不介意使用 C 代码,可以使用它,或者您可以为库编写一个 Objective-C 包装器。
【讨论】:
【参考方案4】:无法让 zimt 或 UnitT 在我的项目中工作,因此我围绕 uiwebview 编写了这个快速包装器,以使用 iOS 4.2 中支持的本机 WebSockets。
https://github.com/zootreeves/iOS-WebSockets/
性能足以处理小消息。
【讨论】:
您在使用 UnitT 时遇到了哪些问题?我很乐意解决任何问题。 Josh,我构建了 UnitT 并将 libUnittWebSocketClient.a 导入到我的项目中。然后测试 socket = [[WebSocket alloc] initWithURLString:@"ws://ip:8080/" delegate:self origin:nil protocols:nil tlsSettings:nil verifyAccept:NO]; [插座打开];我收到错误 Open Error Domain=WebSocketErrorDomain Code=0 "The operation could not be completed. Bad handshake" UserInfo=0x16c480 NSLocalizedFailureReason=Bad handshake websockets 服务器是 Jetty 8。这是在 iOS 4.2 上。 我想我看到了问题所在。您希望 URL 指向您的 WebSocketServlet。我签入了项目 testws,该项目用于在库中针对 Jetty 8.0.M2 运行单元测试。我的 websocket 指向 url,ws://zimt 似乎不适用于 iOS4 - 自 2010 年 4 月 2 日以来没有进行任何更改..
【讨论】:
以上是关于如何将 WebSockets 合并到 Cocoa 应用程序中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Java 11:用Java处理HTTP和WebSockets的新方法!