2010-04-18 11 views
12

Sto sviluppando un'applicazione Cocoa che prevede un elemento chat. Un approccio che ho considerato è l'utilizzo di Websockets per gestire le comunicazioni client-server. Ciò sarebbe particolarmente auspicabile perché le chat verranno visualizzate anche su un sito Web e l'utilizzo di Websockets potrebbe rendere l'implementazione molto semplice.Come incorporare WebSockets in un'applicazione Cocoa

Quindi: sarebbe possibile utilizzare un elemento WebView e utilizzare Websockets al suo interno? (So ​​che Safari non supporta ancora Websockets, quindi immagino che non sia possibile?)

In caso contrario, ci sono librerie client Websocket per C, Objective C o qualsiasi altra lingua che potrei incorporare con successo all'interno della mia applicazione ?

suggerimenti accolti.

risposta

3

Ecco un'implementazione di WebSockets per Objective-C

http://github.com/esad/zimt

+1

A partire da novembre 2012, [zimt è stato dichiarato obsoleto dall'autore] (https://github.com/esad/zimt/commit/39665286bf80dfcc38839870430b2a4350a8f39a) in favore di [SocketRocket] (https://github.com/square)/SocketRocket). Si prega di usare quello al posto di zimt. –

+0

Cosa ha detto JeremyW.Sherman. Anche la bandiera "accettata" dovrebbe essere rimossa da questa bandiera e aggiunta a quella di mikelikespie. – anddam

-1

zimt non sembra di lavorare su iOS4 - non sono state apportate modifiche dal 2 aprile, 2010 ..

0

C'è libwebsocket fornito da warmcat come risposta a my question di una libreria Websocket C++.

Supporta i più recenti consigli standard -04 e -05 e fornisce anche la crittografia tramite SSL. Inoltre dovrebbe funzionare su dispositivi iOS.

Puoi usarlo se non ti dispiace usare il codice C o potresti scrivere un wrapper Objective-C per la libreria.

0

Impossibile ottenere zimt o UnitT per funzionare nel mio progetto, così ho scritto questo wrapper rapido attorno a uiwebview per utilizzare i WebSocket nativi supportati inclusi in iOS 4.2.

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

prestazioni sono sufficienti per i piccoli messaggi.

+0

Quali problemi hai incontrato usando UnitT? Sono felice di risolvere qualsiasi problema. –

+0

Josh, ho creato UnitT e ho importato libUnittWebSocketClient.a nel mio progetto. Quindi per testare socket = [[allocazione WebSocket] initWithURLString: @ "ws: // ip: 8080 /" delegato: auto origine: nil protocolli: nil tlsSettings: nil verifyAccept: NO]; [presa aperta]; Ottengo l'errore Open Error Domain = WebSocketErrorDomain Code = 0 "L'operazione non può essere completata. Bad handshake" UserInfo = 0x16c480 {NSLocalizedFailureReason = Bad handshake} il server websockets è Jetty 8. Questo è su iOS 4.2. –

+0

Penso di vedere il problema. Vuoi che l'URL punti al tuo WebSocketServlet. Ho controllato nel progetto, testws, che ero solito eseguire unit test nella libreria contro Jetty 8.0.M2. Il mio websocket ha indicato l'url, ws: // : 8080/testws/ws/test.Il mio web.xml ha il seguente frammento: ' TestWS com.unitt.testws.TestWebSocketServlet TestWS /ws/* '. Questo risolve il problema? –

18

L'unica libreria WebSocket oggettiva che supporta lo standard più recente, RFC 6455 (al momento della scrittura di questo post) è SocketRocket (dichiarazione di non responsabilità: ne sono autore).

Entrambe le implementazioni client di Unitt e Zimt utilizzano protocolli deprecati e non sembrano essere mantenute.

+0

Che dire di [CoreWebSocket] (https://github.com/mirek/CoreWebSocket)? Ha un buon nome e sembra veloce dato che ha un'API C. Ho creato un problema [CoreWebSocket vs. SocketRocket] (https://github.com/mirek/CoreWebSocket/issues/5) prima di vederlo. – ma11hew28