1. 程式人生 > >cocos creator socket.io 與 node.js socket.io通訊

cocos creator socket.io 與 node.js socket.io通訊

1)客戶端

if (window.io == null){
    window.io = require("./3rd/socket-io.js");
}

var socketio = {
    sio: null,
    
    connect: function (url) {
        var self = this;

        var opts = {
            'reconnection': true,
            'force new connection': true,
            'transports': ['websocket', 'polling']
        }

        this.sio = window.io.connect(url, opts);

        //
        this.sio.on("reconnect", function () {
            console.log("reconnection");
        });

        //
        this.sio.on("connect", function (data) {
            self.sio.connected = true;

            console.log("connected!!!");

            self.send("your_echo", JSON.stringify({
                stype: "auth",
                ctype: "login",
                data: {
                    name: "jianan",
                    pwd: 123456
                }
            }))
        });

        //
        this.sio.on("disconnect", function () {
            console.log("disconnect");

            self.sio.connected = false;
        });

        //
        this.sio.on("connect_failed", function () {
            console.log("connect_failed");

            self.sio.connected = false;
        });

        
        //
        this.sio.on("your_echo", function (data) {
            console.log("client rcv data=" + data);
        });
    },
    
    send: function (event, data) {
        if(this.sio.connected){
            this.sio.emit(event, data);
        }
    },
    
    close: function () {
        if(this.sio && this.sio.connected){
            this.sio.connected = false;
            this.sio.disconnect();
            this.sio = null;
        }
    }
}

module.exports = socketio;
var socketio = require("./socketio.js");

cc.Class({
    extends: cc.Component,

    properties: {

    },

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {},

    start () {
        // websocket.connect("ws://127.0.0.1:6080/ws");
        socketio.connect("127.0.0.1:6081");
    },

    // update (dt) {},
});

需要特別注意的是:客戶端引入的這個第三方的socket.io模組版本一定要和npm安裝的伺服器的socket.io一致才行,否則可能出現連不上的情況。 而使用websocket,一般客戶端已經封裝好了這個模組,因此更為簡單一點。 推薦使用websocket而不是socket.io

2)伺服器

var socket_io = require("socket.io");
var sio = socket_io(6081);

sio.sockets.on("connection", function (socket) {
    console.log("client coming");

    socket.on("your_echo", function (data) {
        console.log("server rcv data=" + data);

        socket.emit("your_echo", data);
    });

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