如何将 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://:8080/testws/ws/test。我的 web.xml 有以下片段:` TestWScom.unitt.testws.TestWebSocketServletTestWS/ws/*`。这能解决问题吗?【参考方案5】:

zimt 似乎不适用于 iOS4 - 自 2010 年 4 月 2 日以来没有进行任何更改..

【讨论】:

以上是关于如何将 WebSockets 合并到 Cocoa 应用程序中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WebSockets 将多个文件发送到服务器?

Java 11:用Java处理HTTP和WebSockets的新方法!

如何将堆栈跟踪打印到控制台/登录 Cocoa?

如何使用棘轮 websockets 将数据发送到服务器 onload?

如何允许用户将文件拖出 Cocoa 应用程序

如何将 Leopard 和 Snow Leopard 支持添加到 Lion Cocoa 应用程序?