WebSocket 客户端和服务器(Unity 和 NodeJS)
NodeJS WebSocket 服务器
这是 NodeJS Websocket 服务器示例:
const WebSocket = require(‘ws’) const wss = new WebSocket.Server({
port: 8080 },()=>{
console.log(‘server started’) }) wss.on(‘connection’, function connection(ws) { ws.on(‘message’, (data) => {
console.log(‘data received /n %o’,data)
ws.send(data); }) })
wss.on(‘listening’,()=>{
console.log(‘listening on 8080’)
})
服务器代码说明
我们使用 ws 模块来创建 websocket 服务器
websocket 套接字服务器有 5 个事件,我们可以监听并触发我们想要的任何操作,您可以在此处找到这些事件的文档。
WebSocket 服务器模块事件
首先,我们创建服务器并在端口 8080 上侦听消息,然后打印小消息“服务器已启动”
其次,我们监听WebSocket服务器模块事件,我们使用监听和连接两个事件来监听。
一旦我们开始监听连接事件,我们就可以捕获连接的客户端并开始监听客户端事件。
WebSocket 客户端模块有 8 个我们可以监听的事件,你可以在这里找到 WebSocket 客户端事件的文档
WebSocket 客户端模块事件
一旦我们捕获连接的客户端,我们就会监听客户端上的“消息”事件并收集从客户端发送的数据,然后将其发送回同一客户端。
启动服务器时,您应该在终端中看到以下内容
在 VS Code 终端中查看
Unity 中的 WebSocket 客户端 (C#)
为了开始在 Unity 中使用 WebSocket 客户端,我们将使用 C# 包管理器 Nuget 添加 WebSocket C# 库。
您可以从这里下载 Nuget Unity 插件
将 Nuget Unity 包导入到项目中后,您可以搜索“WebSocketSharp-netstandard”并安装到 Unity 项目中。
以下是 Unity C# WebSocket 客户端示例:
using UnityEngine;using WebSocketSharp;public class WsClient : MonoBehaviour{ WebSocket ws; private void Start() { ws = new WebSocket("ws://localhost:8080"); ws.Connect(); ws.OnMessage += (sender, e) => { Debug.Log("Message Received from "+((WebSocket)sender).Url+", Data : "+e.Data); }; }private void Update() { if(ws == null) { return; }if (Input.GetKeyDown(KeyCode.Space)) { ws.Send("Hello"); } }}
客户端代码说明
我们使用两个命名空间“UnityEngine”,因此我们可以使用 Monobehaviour 来使用启动和更新回调,并且我们使用“WebSocketSharp”来使用 WebSocket 客户端实现。
在 Start 函数中,我们将一个新的 WebSocket 对象与 WebSocket url 分配给 ws WebSocket 对象。
ws = new WebSocket("ws://localhost:8080");
然后我们开始WebSocket连接
ws.Connect();
然后,我们向 onMessage 添加一个侦听器,以打印发送者 url 和从发送者收到的数据。
ws.OnMessage += (sender, e) => { Debug.Log("Message Received from "+((WebSocket)sender).Url+", Data : "+e.Data); };
在 Update 回调中,我们检查 websocket 是否已启动,如果没有则返回。
如果按下空格键,我们会向服务器发送一条消息。
private void Update() { if(ws == null) { return; }if (Input.GetKeyDown(KeyCode.Space)) { ws.Send("Hello"); } }}
在编辑器中运行场景并且服务器正在运行后,您应该在 Unity 和 NodeJS 服务器中看到以下内容