This is the simplest and easiest WebSocket library for Unity you can find!
- No external DLL's required (uses built-in
System.Net.WebSockets) - WebGL/HTML5 support
- Supports all major build targets
- Very simple API
This WebSocket client is used on colyseus-unity3d.
Consider supporting my work on Patreon.
Installation
Requires Unity 2019.1+ with .NET 4.x+ Runtime
Install via UPM (Unity Package Manager)
- Open Unity
- Open Package Manager Window
- Click Add Package From Git URL
- Enter URL:
https://github.com/endel/NativeWebSocket.git#upm
Install manually
- Download this project
- Copy the sources from
NativeWebSocket/Assets/WebSocketinto yourAssetsdirectory.
Usage
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using NativeWebSocket; public class Connection : MonoBehaviour { WebSocket websocket; // Start is called before the first frame update async void Start() { websocket = new WebSocket("ws://localhost:2567"); websocket.OnOpen += () => { Debug.Log("Connection open!"); }; websocket.OnError += (e) => { Debug.Log("Error! " + e); }; websocket.OnClose += (e) => { Debug.Log("Connection closed!"); }; websocket.OnMessage += (bytes) => { Debug.Log("OnMessage!"); Debug.Log(bytes); // getting the message as a string // var message = System.Text.Encoding.UTF8.GetString(bytes); // Debug.Log("OnMessage! " + message); }; // Keep sending messages at every 0.3s InvokeRepeating("SendWebSocketMessage", 0.0f, 0.3f); // 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(); } }
Demonstration
1. Start the local WebSocket server:
cd Server
npm install
npm start
2. Open the NativeWebSocket/Assets/WebSocketExample/WebSocketExampleScene.unity on Unity and Run.
Acknowledgements
Big thanks to Jiri Hybek. This implementation is based on his work.
License
Apache 2.0
