2010-04-18 12 views
12

Estoy desarrollando una aplicación Cocoa que implica un elemento de chat. Un enfoque que he considerado es usar Websockets para manejar la comunicación cliente-servidor. Esto sería particularmente deseable porque los chats también se mostrarán en un sitio web, y el uso de Websockets podría hacer que la implementación sea muy simple.Cómo incorporar WebSockets en una aplicación Cocoa

Entonces: ¿sería posible usar un elemento WebView y usar Websockets dentro de él? (Sé que Safari aún no es compatible con Websockets, ¿me imagino que esto no es posible?)

En su defecto, existen algunas bibliotecas de clientes de Websocket para C, Objective C o cualquier otro idioma que pudiera incrustar satisfactoriamente en mi aplicación ?

Sugerencias bienvenidas.

Respuesta

3

Aquí es una implementación de websockets para Objective-C no parece

http://github.com/esad/zimt

+1

A partir de noviembre de 2012, [zimt ha quedado en desuso por su autor] (https://github.com/esad/zimt/commit/39665286bf80dfcc38839870430b2a4350a8f39a) a favor de [SocketRocket] (https://github.com/square/SocketRocket). Por favor use eso en vez de zimt. –

+0

Lo que JeremyW.Sherman dijo. También se debe quitar la bandera "aceptada" de esta bandera y agregarla a la de mikelikespie. – anddam

-1

Zimt para trabajar en iOS4 - no se hicieron cambios desde abril de 2010 .. 2 ª

0

No es libwebsocket proporcionado por warmcat como respuesta al my question de una biblioteca C++ Websocket.

Es compatible con la recomendación estándar más reciente -04 y -05 y también proporciona cifrado a través de SSL. Además, debería funcionar en dispositivos iOS.

Puede usarlo si no le molesta usar el código C o puede escribir un contenedor Objective-C para la biblioteca.

0

No pude conseguir zimt o UnitT para trabajar en mi proyecto, así que escribí este contenedor rápido en uiwebview para usar los nativos WebSockets compatibles incluidos en iOS 4.2.

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

rendimiento es suficiente para mensajes pequeños.

+0

¿Qué problemas te encontraste al usar UnitT? Estoy feliz de solucionar cualquier problema. –

+0

Josh, construí UnitT e importé libUnittWebSocketClient.a en mi proyecto. Luego, para probar socket = [[WebSocket alloc] initWithURLString: @ "ws: // ip: 8080 /" delegar: origen propio: protocolos nulos: nil tlsConfiguraciones: nil verifyAccept: NO]; [socket abierto]; Aparece el error Open Error Domain = WebSocketErrorDomain Code = 0 "No se pudo completar la operación. Mala comunicación" UserInfo = 0x16c480 {NSLocalizedFailureReason = Bad handshake} el servidor de websockets es Jetty 8. Esto es en iOS 4.2. –

+0

Creo que veo el problema. Desea que la URL apunte a su WebSocketServlet. Revisé el proyecto, testws, que solía ejecutar pruebas unitarias en la biblioteca contra Jetty 8.0.M2. Mi websocket apuntaba a la url, ws: // : 8080/testws/ws/test.Mi web.xml tiene el siguiente fragmento: ' testws com.unitt.testws.TestWebSocketServlet TestWS /ws/* '. ¿Eso soluciona el problema? –

18

La única biblioteca webSocket de Object-c que admite el estándar más reciente, RFC 6455 (en el momento de escribir esta publicación) es SocketRocket (descargo de responsabilidad: soy el autor).

Ambas implementaciones de cliente de Unitt y Zimt están utilizando protocolos obsoletos y no parecen mantenerse.

+0

¿Qué pasa con [CoreWebSocket] (https://github.com/mirek/CoreWebSocket)? Tiene un buen nombre y parece rápido ya que tiene una API de C. Creé un problema [CoreWebSocket vs. SocketRocket] (https://github.com/mirek/CoreWebSocket/issues/5) antes de ver esto. – ma11hew28

Cuestiones relacionadas