Unity3D WebGL平台使用WebSocket通信的方法和示例

      之前在WebGL平台和服务端交互的时候使用的是UnityWebRequest,通过WebAPI的方式进行交互,后来发现可以用WebSocket交互后就果断换了WebSocket。

一、Unity3D客户端

我在Unity端使用的是NativeWebSocket

NativeWebSocket下载地址

直接导入Unity即可,

下面是适配的代码,直接挂载在GameObject。

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using NativeWebSocket;
using LitJson;

public class Connection : MonoBehaviour
{
    WebSocket websocket;

    public Text textLog;


    async void Start()
    {
        websocket = new WebSocket("ws://127.0.0.1:7181");

        websocket.OnOpen += () =>
        {
            Debug.Log("Connection open!");
            // textLog.text = $"Connection open! {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnError += (e) =>
        {
            Debug.Log("Error! " + e);
            // textLog.text = $"Error:{e} {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnClose += (e) =>
        {
            Debug.Log("Connection closed!");
            // textLog.text = $"Connection closed! {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnMessage += (bytes) =>
        {
            // Debug.Log("OnMessage!");
             //textLog.text = $"OnMessage! {Time.realtimeSinceStartup} \n {textLog.text}";
            //  Debug.Log(bytes);

            // getting the message as a string
            var message = System.Text.Encoding.Default.GetString(bytes);
            textLog.text = $"消息内容:{message} ";
            Debug.Log("OnMessage! " + message);

            //SocketData Sdata= JsonMapper.ToObject<SocketData>(message);
            var Sdata=JsonMapper.ToObject< Dictionary<string, string>>(message);
            Debug.Log(Sdata["data"]);
            string b = Sdata["data"];
           byte[] bs= Convert.FromBase64String(b);
            var m = System.Text.Encoding.Default.GetString(bs);
            Debug.Log(m);
        };

        // Keep sending messages at every 0.3s
       // InvokeRepeating("SendWebSocketMessage", 0.0f, 2f);

        // waiting for messages
        await websocket.Connect();
    }

    void Update()
    {
#if !UNITY_WEBGL || UNITY_EDITOR
        websocket.DispatchMessageQueue();
#endif
    }

    async void SendWebSocketMessage()
    {
        if (websocket.State == WebSocketState.Open)
        {
            // Sending bytes
            await websocket.Send(new byte[] { 10, 20, 30 });

            // Sending plain text
            await websocket.SendText("plain text message");
        }
    }
    
    private async void OnApplicationQuit()
    {
        await websocket.Close();
    }




}


二、服务端

运行后可与客户端交互

下载地址

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity WebGL使用WebSocket需要借助一些第三方库,例如Socket.IO和WebSocketSharp等,这里以WebSocketSharp为例进行说明。 首先需要在服务器端搭建WebSocket服务器,可以使用C#编写服务器端代码,使用WebSocketSharp库实现WebSocket服务端,示例代码如下: ```csharp using System; using WebSocketSharp; using WebSocketSharp.Server; public class MyWebSocket : WebSocketBehavior { protected override void OnMessage(MessageEventArgs e) { Console.WriteLine("Received message: " + e.Data); Send("Received message: " + e.Data); } } class Program { static void Main(string[] args) { var wssv = new WebSocketServer("ws://localhost:8080"); wssv.AddWebSocketService<MyWebSocket>("/mywebsocket"); wssv.Start(); Console.ReadLine(); wssv.Stop(); } } ``` 在这个示例中,我们创建了一个WebSocketServer实例,监听本地的8080端口,使用AddWebSocketService方法注册MyWebSocket类,然后启动WebSocketServer实例。MyWebSocket类继承自WebSocketBehavior,重写OnMessage方法处理WebSocket消息。 接下来,在Unity WebGL项目中使用WebSocket需要借助WebSocketSharp库,可以通过NuGet安装WebSocketSharp库,或者直接下载官方GitHub仓库中的WebSocketSharp.dll文件。 使用WebSocketSharp库实现Unity WebGL中的WebSocket客户端,示例代码如下: ```csharp using UnityEngine; using WebSocketSharp; public class MyWebSocket : MonoBehaviour { WebSocket ws; void Start() { ws = new WebSocket("ws://localhost:8080/mywebsocket"); ws.OnMessage += (sender, e) => { Debug.Log("Received message: " + e.Data); }; ws.Connect(); ws.Send("Hello, WebSocket!"); } void OnDestroy() { ws.Close(); } } ``` 在这个示例中,我们创建了一个WebSocket实例,连接到本地的WebSocket服务器,发送一条消息并等待接收服务器的回复。WebSocket实例的OnMessage事件处理程序用于接收服务器发送的消息,使用Debug.Log打印到控制台。 需要注意的是,在Unity WebGL使用WebSocket需要在WebGL Player Settings中启用WebSockets选项,并在项目的index.html文件中添加WebSocketSharp库的引用。 综上所述,使用WebSocketSharp库可以方便快速地在Unity WebGL使用WebSocket,搭建WebSocket服务器时也可以使用C#编写服务器端代码,使用WebSocketSharp库实现WebSocket服务端。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值