20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LoopBackでSocket.IOを使う方法

Last updated at Posted at 2015-06-01

RESTなWebAPI作るためのフレームワークなのにSocket.IO使うっていうケースがどの程度あるのかわからないけれど、日本語情報が無かったのでメモ。

本記事は東京Node学園入学式2015の時にLTした内容『Loop backを使った極初歩的なapiとswiftで作るオシャレアプリ()』の延長版です。

いくつか未検証事項もあるけどご容赦を。
記述漏れ等で「動かねーぞ!」って時はコメントください。

前提

  • loopback: 2.8.0
  • socket.io: 1.3.5
  • io.js: 1.5.x

動作確認は

  • MacOSX 10.10
  • Heroku
    にて行いました。

slc loopbackして雛形生成してある状態から作業を始めます。

Socket.IOの利用方法

多分実用的な実装方法の紹介です。

インストール

npm install socket.io --saveで普通にインストール

server.jsのboot関数を以下のように編集する

次のブートストラップ処理でサーバインスタンスを参照できるようにserver.jsを修正する。

server.js
boot(app, __dirname, function (err) {
    if (err) {
        throw err;
    }

    // start the server if `$ node server.js`
    if (require.main === module) {
        // app.serverでサーバインスタンスにアクセスできるようにする
        app.server = app.start();
    }
});

Socket.IOのブートストラップを書く

server/boot/以下にファイルを置くと(たぶんloopback-bootモジュールが)読み込んでくれる。

server/boot/socketio.js
module.exports = function (app) {
    app.on('started', function () {
        app.io = require('socket.io').listen(app.server);
        // server/socketio/index.jsを読み込む
        // 第2引数のapp.ioはappに含まれるので引数1つで大丈夫だと思う
        // (未検証なので動作確認時のまま記載)
        require('../socketio/')(app, app.io);
    });
};

Socket.IOの実処理を書く

上記でserver/socketio/index.jsを読み込むように実装したので処理を記述する。
直接index.jsに処理を実装してもいいけれど、機能ごとにファイル分割できるようにする。

server/socketio/index.js
module.exports = function (app, io) {
    // 実際の処理が記述されたファイルを読み込む
    require('./pink-noise')(app, io);

    // 機能が増えたらここに追記していく
};
server/socketio/pink-noise.js
module.exports = function (app, io) {
    io.on('connection', function (socket) {
        // あとは普通通りにSocket.IOの実装をすすめる
        console.log('connect...');

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

        socket.on('hogehoge', function () {
            // hogehoge
        });
    });
};

参考文献

LoopbackJS > Loopback with socketio - Google Groups
ここに投稿されていた内容を自分好みにアレンジして利用させてもらいました。

20
20
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
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?