LoginSignup
16
13

More than 5 years have passed since last update.

Swift で Socket.IO を試す

Posted at

Socket.IO-Client-Swift とは

Socket.IO-Client-Swift」とは、Socket.IO 公式の Swift 用ライブラリのようです。

クライアント側のプロジェクトを作成

プロジェクトの雛形を作成

Swift Package Manager を使います。

$ mkdir client
$ cd client

$ swift package init --type executable
Creating executable package: client
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/

Package.swift を修正

dependencies 部分を追加して、Socket.IO-Client-Swift を使えるようにします。

Package.swift
import PackageDescription

let package = Package(
    name: "client",
    dependencies: [
        .Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 8)
    ]
)

ライブラリの取得とビルド

$ swift build
Cloning https://github.com/socketio/socket.io-client-swift
HEAD is now at 163a770 bump version
Resolved version: 8.1.2
Compile Swift Module 'SocketIO' (24 sources)
Compile Swift Module 'client' (1 sources)
Linking ./.build/debug/client

テスト用ソース

クライアント側

main.swift
import Foundation
import SocketIO

let socket = SocketIOClient(socketURL: URL(string: "http://localhost:3000")!, config: [.forceWebsockets(true)])

socket.on("connect") { data, ack in
    print("socket connected")

    print("send message")
    socket.emit("from_client", "Hello")
}

socket.on("from_server") { data, ack in
    if let msg = data[0] as? String {
        print("receive: " + msg)
    }
}

socket.connect()

CFRunLoopRun()

サーバ側

Node.js を使います。

server.js
var server = require("http").createServer(function(req, res) {
    res.write("Hello World!!");
    res.end();
});
var io = require('socket.io')(server);

io.on('connection', function(socket) {
    console.log("client connected")

    socket.on('disconnect', function() {
        console.log("client disconnected")
    });

    socket.on("from_client", function(msg){
        console.log("receive: " + msg);

        console.log("send message");
        socket.emit("from_server", "welcome");
    });
});

server.listen(3000);

実行

サーバ側実行

まずはサーバ側を実行しておきます。

$ node server.js

クライアント側ビルド & 実行 & 結果表示

クライアント側を実行と表示内容です。

$ swift build
Compile Swift Module 'client' (1 sources)
Linking ./.build/debug/client

$ .build/debug/client
socket connected
send message
receive: welcome
^C

サーバ側結果表示

サーバ側の表示内容です。

$ node server.js
client connected
receive: Hello
send message
client disconnected
16
13
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
16
13