m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

scoket.ioで下層パスごとに処理を記載する

パス別に処理を分割したいみたいな…

ホスト名は実際のwebサイトみたいに扱って/hogehoge1、/hogehoge2とかでsocket通信したいみたいな感じですかね

やったこと

下層パスを用意して、処理を記載。
クライアントもそれに合わせたURIを指定してアクセス

実装

サーバ側
var io = require('socket.io').listen(3000);

// 下層パス1
io.of("/hogehoge/test1").on("connect", socketFunction1);

// 下層パス2
io.of("/hogehoge/test2").on("connect", socketFunction2);

// 接続処理1
function socketFunction1(socket) {

    console.log("/hogehoge/test1: connected");

    // メッセージ
    var msg = {
        "client": "client_" + (new Date()).getTime(),
        "msg": "接続OKです。"
    };
    socket.emit("client_info", msg);

    // 切断
    socket.on("disconnect", function() {
        console.log("/hogehoge/test1: disconnected");
    });

    // メッセージ受信
    socket.on("message", function(data) {
        console.log("送信:" + data);
    });

}

// 接続処理2
function socketFunction2(socket) {

    console.log("/hogehoge/test2: connected");

    // メッセージ
    var msg = {
        "client": "client_" + (new Date()).getTime(),
        "msg": "接続OKです。"
    };
    socket.emit("client_info", msg);

    // 切断
    socket.on("disconnect", function() {
        console.log("/hogehoge/test2:" + "disconnected");
    });

    // メッセージ受信
    socket.on("message", function(data) {
        console.log("送信:" + data);
    });

}
クライアント1
var client = require("socket.io-client");
var socket = client.connect("http://localhost:3000/hogehoge/test1");

// 接続
socket.on("connect", function() {
    console.log("/hogehoge/test1: client connected");
});

// メッセージ受信
socket.on("message", function(data) {
    console.log("/hogehoge/test1:" + "受信文字:" + data);
});

// 接続情報
socket.on("client_info", function(data) {
    clientId = data.client;
    console.log("client:" + clientId);
});

// 5秒後に切断
setTimeout(function() {
    socket.disconnect();
}, 5000);
クライアント2
var client = require("socket.io-client");
var socket = client.connect("http://localhost:3000/hogehoge/test2");

var clientId = "";

// 接続
socket.on("connect", function() {
    console.log("/hogehoge/test2 client connected");
});

// メッセージ受信
socket.on("message", function(data) {
    console.log("/hogehoge/test2: " +  "受信文字:" + data);
});

// 接続情報
socket.on("client_info", function(data) {
    clientId = data.client;
    console.log("client:" + clientId);
});

// 5秒後に切断
setTimeout(function() {
    socket.disconnect();
}, 5000);

所感

サーバ側はそれぞれ用意しないといけないのと同じでクライアントもURIを指定する必要がある。
まあ、サーバで設定するイベントの使用可否が変わってくるはずなのでこの辺の問題は受け入れる事となる。
実際にhttp://localhost:3000/sample1みたいなURIのsocket.io通信自体はあるのでその設定自体がわかっただけでも良いこととなりました。
最初はwebサーバとかでなんかしないといけないとか考えてて面倒くさいと思っていたのでちょっと楽になった感じ
javascriptjqueryしか使っていないのでnodejsをもう少し勉強してjavascriptの知識向上に役立てたい。