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
#import "SRWebSocket.h"
@interface WSSViewController : UIViewController {
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データを送信し、サーバから何かが返ってくると、ログを出力します。
とはいえ、サーバ側を実装しないと動かないので、続きます・・・。
コメント
[…] Post navigation ← Previous […]
[…] 「WebSocketってなんだ?」「SocketRocketでiPhoneからWebSocket通信をする。」「Node.jsでWebSocketサーバを立てる」で要素技術は学んだので、さっそくリアルタイム通信なおもちゃの作成に挑みました。 […]