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
- (Used in Colyseus Unity SDK)
Patreon | Ko-fi | PayPal
Consider supporting my work onInstallation
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/WebSocket
into yourAssets
directory.
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