Help us understand the problem. What is going on with this article?

SocketRocketでWebSocket実装してみる。

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

n0bisuke
プロトタイピング専門スクール「プロトアウトスタジオ」で教えたりしてます。 プロフ -> https://dotstud.io/members/n0bisuke
https://protoout.studio
dotstudio
全ての人がモノづくりを楽しむ世界を目指して活動しています。
https://dotstud.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした