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

本文介绍了在Unity3D中使用NativeWebSocket库与服务端通过WebSocket进行实时交互的方法,包括连接建立、错误处理、消息收发以及数据的JSON解析。在WebGL平台上,这种方式提供了比UnityWebRequest更优的通信体验。
摘要由CSDN通过智能技术生成

      之前在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();
    }




}


二、服务端

运行后可与客户端交互

下载地址

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值