需求描述:Unity通过Socket发送数据给网页在前端VUE中显示,socket服务采用Python实现。
实际上这个功能可以分为下面三个部分:查了好多资料,整理如下的学习路线方便新手入坑。
1、Unity和服务端的Socket通信;
Unity的Socket服务,这个部分还算顺利没有遇到太坑的问题,参考下面的文章:
http://www.luohanjie.com/2019-07-25/socket-io-for-unity3d.html
这里提到的一个插件 Socket For Unity3d在官网上可能已经下架了。
这里提供了一个下载地址:
https://download.csdn.net/download/zhoudapeng01/13244328
3、Python中Socket的服务搭建;
注意版本!版本!版本!,这一部分坑就多了,搞了几天才发现问题,都快搞疯了。如果你的前端不涉及跨域的问题,按照上文博客中的方式也可以实现,我一方面是跨域,一方面是之前没那篇文章所以走了些弯路。
推荐参考下面的博客进行python后端的搭建。这里的代码也是仿造博客中写的,虽然没几行代码可是坑是真多啊。
from flask import Flask
from flask import request,jsonify
from flask_cors import CORS
from flask_socketio import SocketIO,send,emit
import urllib.parse
app = Flask(__name__)
CORS(app,cors_allowed_origins="*")
socketio = SocketIO(app,cors_allowed_origins='*')
@socketio.on('unitySent')
def on_unitySent(data):
if data:
socketio.emit('sentToVue', data, skip_sid=True)
else:
print ('Recieved Empty Data!')
if __name__ == '__main__':
socketio.run(app,debug=True,host="0.0.0.0",port=5000)
坑1:eventlet没有安装:
没有安装eventlet,没有报错,但是服务起来的时候没有监听提示。这里最恶心的是前后端都没有报错,一度认为是前端的问题,尝试了不同的VUE版本,最后无意中发现是这个问题。
坑2:版本不对应,这个恶心在这里的版本依赖关系,建议使用pip install -r requirement.txt 文件的方式,因为有些时候是底层的依赖库版本有问题,排查起来相当费劲。
推荐一份本文使用的版本:
requirements.txt
click==7.1.2
dnspython==2.0.0
eventlet==0.25.1
Flask==1.1.2
Flask-Cors==3.0.9
Flask-SocketIO==4.3.1
greenlet==0.4.16
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
python-engineio==3.13.2
python-socketio==4.6.0
Werkzeug==1.0.1
2、VUE和服务端的Socket通信;
VUE中使用socket要注意使用的版本,主要是Vue.use()使用的方式不同,这里是按照类的方式使用的,消息的添加参考上面的博客即可,注意是上面不是下面。
VUE中使用Socket.io参考:https://www.html.cn/web/vue-js/19306.html
其他:
在做的过程中发现Python 的Socket服务坑好多啊,如果不是必须使用python,建议大家可以转为Node.js,使用方便,没问题。要不是为了后期数据处理,真的都想放弃了。
Python(客户端)Node.js(服务端) 参考:https://www.jianshu.com/p/848d99c041bd