Socket.io res 没有统一
Posted
技术标签:
【中文标题】Socket.io res 没有统一【英文标题】:Socket.io res doesn't get on unity 【发布时间】:2015-07-28 14:22:46 【问题描述】:我在 Asset Store 上使用 Socket.io 客户端。(https://www.assetstore.unity3d.com/kr/#!/content/21721)
当我改变场景时,套接字响应不起作用。
例如
场景 A 有 socketIOComponent prefeb。 代码在这里。 (它是删除 'emit code' 和 '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 服务器在“OnGUI”函数中获取请求“test2”。 但是“res2”的响应是行不通的。
服务器代码在这里
socket.on("test2", function(data)
socket.emit("res2");
);
。我不明白这种情况。因为场景 A 工作得很好(req, res) 而场景 B 只是工作请求。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,我刚刚找到了解决方案。
需要在函数Awake中的SocketIOComponent实例上添加DontDestroyOnLoad。
函数Awake一定是这样的(这是我的函数Awake):
public void Awake ()
if (instance == null)
instance = this;
else if (instance != this)
Destroy (gameObject);
DontDestroyOnLoad (socketIO);
DontDestroyOnLoad (gameObject);
【讨论】:
以上是关于Socket.io res 没有统一的主要内容,如果未能解决你的问题,请参考以下文章