1.问题:
最近在用Unity做基于socket通信时,遇到个大坑
客户端开了个线程接收消息,用一个MsgManager消息单例去接收序列化后的消息,发现报错。
2.原因:
查了一些资料最后找到问题,开的线程或者异步中,不能去调用主线程的方法,
MsgManager继承了monobehaviour,在AddMsg里面直接做表现(UGUI)属于是跨线程操作
简单来说不能跨线程操作。
3.解决方法:
socketclient声明一个消息队列,用消息队列存储当前收到的消息
public Queue<byte[]> receiveMsg;
将数据通过SocketManager的Update进行获取就好了
4.总结:
clientSocket对象脚本中添加一个消息队列获取服务器消息,再在调用clientSocket对象脚本中的Update进行消息获取再处理。