我正在尝试使用node-red-contrib-socketio包根据来自Weather Underground的输入从Node-Red向客户端发出'weather'事件。
我在node-red函数中使用以下代码来处理来自WeatherUnderground的输入并设置事件:
weather = msg.payload.weather;
msg.payload = {weather: weather};
msg.socketIOEvent = 'weather';
RED.util.setMessageProperty(msg, "socketIOEmit", "emit", true);
return msg;
这是设置和发出天气事件的正确方法吗?
供参考:
我已将SocketIO Out节点绑定到Node_Red(因此可能是本地主机上的端口1880)。我正在使用Unity游戏引擎作为客户端,通过资产商店的Socket.IO库接收事件:https://assetstore.unity.com/packages/tools/network/socket-io-for-unity-21721
Unity正在通过以下网址收听天气事件:
ws://127.0.0.1:1880/socket.io/?EIO=4&transport=websocket
目前Unity似乎正在注册连接,但没有注册天气事件。
用于处理Unity中事件的我的测试C#脚本如下:
using UnityEngine;
using SocketIO;
public class NodeNetwork : MonoBehaviour
{
//Reference socket component
static SocketIOComponent socket;
void Start()
{
//Initialise reference to socket component
socket = GetComponent<SocketIOComponent>();
//Register callbacks for network events
socket.On("open", OnConnected);
socket.On("weather", OnWeather);
}
//Create a callback for the connection
void OnConnected(SocketIOEvent e)
{
Debug.Log("Connected");
//Emit a move call back to the server
socket.Emit("client connected");
}
//Create a callback for receipt of weather events
void OnWeather(SocketIOEvent e)
{
Debug.Log("New weather event received" + e.data);
socket.Emit("weather received");
}
}
任何建议都将受到赞赏。
答案 0 :(得分:1)
根据您提供的代码和资产的所有者,它似乎是DEPRECATED SocketIO Unity port,我建议您查看socket.io-unity(这是免费的github和10 $来自资产商店)这是Quobject SocketIoClientDotNet的修订版,可与Unity3D一起使用
我知道这不是一个具体的答案(除了切换库)来修复你的问题,但你的包的所有者已经说了两年多以前他已经停止了它的开发。因此,为什么我认为将库切换为主要选项会很有趣,我实际上认为你做得对,而且它不起作用。我目前正在工作,无法对此进行测试,抱歉。我希望我能以某种方式提供帮助。
答案 1 :(得分:0)
经过进一步的研究和测试,我得到了这个工作。 Node-Red流程很好但是某种配置问题阻止了它的工作。重新安装Node.js和Node-Red解决了这个问题。
根据@hardillb的建议使用msg.socketIOEmit = "emit"
。
我为Unity测试了几个SocketIO解决方案,并使用SocketIO for Native and WebGL builds by DASPETE结束,这是一个10美元的付费资产。
为了反序列化JSON,我使用了SaladLab的JSONNetLite Unity package,它是NewtonSoft.JSon.NET的一个分支。
要在Unity WebGL构建中成功使用该程序包,您需要在资产文件夹中添加link.xml file。这会增加默认Unity字节码剥离的例外情况,这会从DLL中删除未使用的代码,如Newtonsoft.Json包。
如果你遇到同样的问题,我希望这会有所帮助。