SocketRocketでiPhoneからWebSocket通信をする。

WebSocketってなんだ? に続きまして、WebSocketネタです。

WebSocketでリアルタイムな何かを作るにあたって、ブラウザベースで作ってもいいのですが、まずはiPhoneで作ってみることにしました。WebSocketに未対応のブラウザもあるので、そのあたりを想像するだけで胃がキリキリするためです。

SocketRocketはObjective-C用のWebSocketライブラリ

ぼちぼちと調べたところ、Objective-CでWebSocket通信をするためのライブラリとして、SocketRocketが良さそうでした。

Objective-C でWebSocketの通信をする(SocketRocket) – 病みつきな副産物

そして、このブログが猛烈に分かりやすかったです。

サーバとクライアントの両方を作らないと試せないのが少し面倒ですが、まずはクライアント側について書いていきます。

SocketRocketの導入

ライブラリの導入

なにはともあれ、ライブラリを入手します。

git submodule add https://github.com/square/SocketRocket

そして、Xcodeにサブプロジェクトとして導入します。

依存ライブラリの設定

Build Phaseの設定で、依存する以下のライブラリを導入します。

Security.framework
CFNetwork.framework
libicucore.dylib

Header Search Pathsの設定

Header Search Pathsにサブプロジェクトのパスを通します。

Header Search Paths $(PROJECT_DIR)/SocketRocket

Other Linker Flagsの設定

Other Linker Flagsにオプションとして、-ObjCを指定します。

Other Linker Flags -ObjC

クライアントサイドの実装

すごく単純に実装するとこのようになると思います。

#import <UIKit/UIKit.h>
#import "SRWebSocket.h"
 
@interface WSSViewController : UIViewController <SRWebSocketDelegate> {
    SRWebSocket *socket;
    IBOutlet UITextField *hostTextField;
}
 
- (IBAction)connect:(id)sender;
 
@end
#import "WSSViewController.h"
 
@interface WSSViewController ()
@end
 
@implementation WSSViewController
 
- (void)webSocketDidOpen:(SRWebSocket *)webSocket{
    [webSocket send:@"{\"id\":\"1\"}"];
}
 
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message{
    NSLog(@"didReceiveMessage: %@", [message description]);
}
 
- (IBAction)connect:(id)sender {
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"ws://%@:8080/",hostTextField.text]];
    socket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:url]];
    socket.delegate = self;
    [socket open];
}
 
@end

画面には、接続先と接続ボタンを置いています。接続をすると、テキトーなJSONデータを送信し、サーバから何かが返ってくると、ログを出力します。

とはいえ、サーバ側を実装しないと動かないので、続きます・・・。

About katty0324

2 comments

Leave a Reply

Scroll To Top