Socket.io res并没有团结一致

时间:2015-07-28 14:22:47

标签: c# node.js sockets unity3d

我在资源商店使用了Socket.io客户端。(https://www.assetstore.unity3d.com/kr/#!/content/21721

当我改变场景时,套接字响应无效。

例如

场景A具有socketIOComponent prefeb。 代码在这里。 (它是删除'发出代码'' socket.on(" res",function())')

GameObject go;
public SocketIOComponent socket;

private static Network _instance;

public static Network instance{
    get{
        if(_instance == null){
            _instance = new Network();
        }

        return _instance;
    }
}

void Start () {
    go = GameObject.Find("SocketIO");
    socket = go.GetComponent<SocketIOComponent> ();

    DontDestroyOnLoad (this);
}

void Awake(){
    if (_instance == null) {
        _instance = this;
        DontDestroyOnLoad (this);
    } else {
        if(this != _instance){
            Destroy(this.gameObject);
        }
    }
}

实现单例模式。

场景B代码就在这里。

Network net;
SocketIOComponent socket;
void Start () {
    net = Network.instance;
    socket = net.GetComponent<Network> ().socket;

    socket.On ("res2", testing);
}

void OnGUI(){
    if (GUI.Button (new Rect (200, 200, 50, 50), "Scene 2")) {
        JSONObject js = new JSONObject();
        js.AddField("Test","test");
        socket.Emit("test2",js);
    }
}

void testing(SocketIOEvent e){
    Debug.Log("12345");
}

Node.js服务器获取请求&#34; test2&#34;在&#39; OnGUI&#39;功能。 但是&#39; res2&#39;回应是行不通的。

服务器代码在这里

socket.on("test2", function(data){
       socket.emit("res2");
 });

。我不明白这种情况。因为场景A的工作非常好(req,res)和场景B只是工作请求。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我刚刚找到了解决方案。

在Awake函数中为SocketIOComponent的实例添加DontDestroyOnLoad是必要的。

Awake函数必须像那样(这是我的函数Awake):

public void Awake ()
{
    if (instance == null) {
        instance = this;
    } else if (instance != this)
    {
        Destroy (gameObject);
    }
    DontDestroyOnLoad (socketIO);
    DontDestroyOnLoad (gameObject);
}