Objective-C
Xcode
iOS
websocket
socketrocket

SocketRocketでWebSocket実装してみる。

More than 3 years have passed since last update.

SocketRocketでiOSクライアント側を実装し、サーバー側はNode.jsで実装してWebSocket連携してみるメモです。

環境

  • Xcode6.0
  • iPhone5s
  • iOS8.0

参考にしているURL

サーバー側

wsモジュールをインストールして実行します。

$ npm install ws

受信したメッセージをそのまま送信するオウム返しなWSサーバーです。

index.js
var WebSocketServer = require('ws').Server
  , wss = new WebSocketServer({port: 8080});

wss.on('connection', function(ws) {

    ws.on('message', function(message) {
        console.log('received: %s', message);

        ws.send(message);
    });

});

SocketRocketの準備

https://github.com/square/SocketRocket のリポジトリ中のSocketRocketフォルダ内( https://github.com/square/SocketRocket/tree/master/SocketRocket )を利用します。

  • SRWebSocket.h
  • SRWebSocket.m
  • SocketRocket-Prefix.pch

をダウンロード等して、プロジェクトに追加します。

ライブラリ追加

依存ライブラリを追加します。

  • libicucore.dylib
  • CFNetwork.framework
  • Security.framework
  • Foundation.framework

Objective-cのコード

ViewController.h

//
//  ViewController.h
//  SocketRocketTest
//
//  Created by 菅原 遼介 on 2014/10/27.
//  Copyright (c) 2014年 n0bisuke. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "SRWebSocket.h"

//@interface ViewController : UIViewController

@interface ViewController : UIViewController <SRWebSocketDelegate> {
    SRWebSocket *socket;
}

@end

ViewController.m

////
////  ViewController.m
////  SocketRocketTest
////
////  Created by 菅原 遼介 on 2014/10/27.
////  Copyright (c) 2014年 n0bisuke. All rights reserved.

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    SRWebSocket *web_socket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://localhost:8080"]]];
    [web_socket setDelegate:self];
    [web_socket open];
    // Do any additional setup after loading the view, typically from a nib.
      NSLog(@"aaaaaaa");
}

- (void)webSocketDidOpen:(SRWebSocket *)webSocket{
    [webSocket send:@"{\"id\":\"1\"}"];
}

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message{
    NSLog(@"didReceiveMessage: %@", [message description]);
}

@end

実行

起動するとiPhone側には何も表示されないですが、XcodeのコンソールとNode.jsを立ち上げてるサーバー(今回はlocalhost)のコンソールで{"id":"1"}と表示されると思います。

感想

割と手こずった...

この辺りを参考にして次はswift書き換えとweb連携をしたいです。