LoginSignup
23
25

More than 5 years have passed since last update.

SocketRocketでWebSocket実装してみる。

Posted at

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連携をしたいです。

23
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
25