2010-04-18 18 views
12

Pracuję nad aplikacją Cocoa, która obejmuje element czatu. Jedną z rozważanych przeze mnie metod jest wykorzystanie Websockets do obsługi komunikacji klient-serwer. Byłoby to szczególnie pożądane, ponieważ czaty będą również wyświetlane na stronie internetowej, a korzystanie z Websockets może sprawić, że wdrożenie będzie bardzo proste.Jak włączyć WebSockets do aplikacji Cocoa

A więc: czy możliwe byłoby użycie elementu WebView i używanie w nim Websockets? (Wiem, że Safari nie obsługuje jeszcze Websockets, więc wyobrażam sobie, że to nie jest możliwe?)

W przypadku awarii, czy istnieją jakiekolwiek biblioteki klienta Websocket dla C, Objective C lub innego języka, który mógłbym z powodzeniem umieścić w mojej aplikacji? ?

Propozycje z zadowoleniem.

Odpowiedz

3

Oto implementacja WebSocket dla objective-c

http://github.com/esad/zimt

+1

Od listopada 2012 r. [Zimt został wycofany przez autora] (https://github.com/esad/zimt/commit/39665286bf80dfcc38839870430b2a4350a8f39a) na korzyść [SocketRocket] (https://github.com/square/SocketRocket). Użyj tego zamiast zimta. –

+0

Co JeremyW.Sherman powiedział. Również flaga "zaakceptowana" powinna zostać usunięta z tej flagi i dodana do mikelikespie. – anddam

-1

zimt nie wydają się działać na iOS4 - nie dokonano żadnych zmian od 2 kwietnia 2010 r ..

0

Jest libwebsocket dostarczone przez warmcat jako odpowiedź na my question biblioteki C++ Websocket.

Obsługuje najnowsze standardowe zalecenia -04 i -05, a także zapewnia szyfrowanie za pomocą protokołu SSL. Dodatkowo powinien działać na urządzeniach z iOS.

Możesz go użyć, jeśli nie masz nic przeciwko używaniu kodu C lub możesz napisać opakowanie Objective-C dla biblioteki.

0

Nie można uzyskać zimt lub UnitT do pracy w moim projekcie, więc napisałem to szybkie opakowanie wokół uiwebview, aby korzystać z natywnego wsparcia WebSockets zawartego w iOS 4.2.

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

wydajność jest wystarczająca dla małych wiadomości.

+0

Jakie problemy napotkali Państwo podczas korzystania z UnitT? Z przyjemnością naprawię wszelkie problemy. –

+0

Josh, zbudowałem UnitT i zaimportowałem libUnittWebSocketClient.a do mojego projektu. Następnie, aby przetestować socket = [[WebSocket alloc] initWithURLString: @ "ws: // ip: 8080 /" delegate: self origin: zero protocols: nil tlsUstawienia: nil verifyAccept: NO]; [gniazdo otwarte]; Pojawia się błąd Open Error Domain = WebSocketErrorDomain Code = 0 "Operacja nie mogła zostać zakończona Zły handshake" UserInfo = 0x16c480 {NSLocalizedFailureReason = Zły uścisk dłoni} serwer websockets to Jetty 8. Jest on na iOS 4.2. –

+0

Myślę, że widzę problem. Chcesz, aby adres URL wskazywał na serwer WebSocketServlet. Sprawdziłem w projekcie, testws, że korzystałem z testu jednostkowego w bibliotece na Jetty 8.0.M2. Mój websocket wskazał adres URL, ws: // : 8080/testws/ws/test.Moja web.xml ma następujący fragment: ' TestWS com.unitt.testws.TestWebSocketServlet TestWS /ws/* '. Czy to rozwiązuje problem? –

18

Jedyną biblioteką obiektów WebSocket, która obsługuje najnowszy standard, RFC 6455 (w momencie pisania tego wpisu) jest SocketRocket (zrzeczenie się: jestem jej autorem).

Implementacje klientów Unitt i Zimt korzystają z nieaktualnych protokołów i nie wydają się być obsługiwane.

+0

Co z [CoreWebSocket] (https://github.com/mirek/CoreWebSocket)? Ma dobrą nazwę i wydaje się szybki, ponieważ ma C API. Stworzyłem problem [CoreWebSocket vs. SocketRocket] (https://github.com/mirek/CoreWebSocket/issues/5) zanim to zobaczyłem. – ma11hew28