全站通知:

Websockets

阅读

    

2023-08-26更新

    

最新编辑:TrimesS_

阅读:

  

更新日期:2023-08-26

  

最新编辑:TrimesS_

来自S&boxWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
-TrimesS-

Stop.png

   

停下来!

这个页面不允许被编辑,它可能因为别人正在进行它的翻译工作或者特殊保护!

是什么?为什么?

Websockets 实现了客户端与服务器之间的双向通信,这意味着双方都可以随时发送和接收数据,客户端无需向服务器重复发出请求。如果您想发出类似 HTTP 的请求,可以使用专用的 API。点我了解更多

示范

基本示例

该示例可在客户端或服务器端调用。但通常情况下,您只需在服务器上启动一个 websocket,然后让客户端与服务器对接,再由服务器使用您的 websocket。

using Sandbox;
using Sandbox.UI.Construct;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

public class Backend: Entity
{
	public Backend() {
		socket = new WebSocket(); // Initialize your websocket
	}  

	public WebSocket socket = null;

	// 通过 websocket 发送简单对象
	private async Task SendMessage() {
		string payload = "my data";

		// 发送信息
		await socket.Send(payload);
	}

	// 处理接收到的信息
	private void HandleMessageReceived(string data) {
		Log.Info(data);
	}

	// 连接后端
	private async Task ConnectToBackend() {
		// 添加处理接收到的信息的函数
		socket.OnMessageReceived += HandleMessageReceived; 

		// 连接成功!
		await socket.Connect("wss://your-websocket-endpoint");
	}
}
注意:Websocket URL 也受 HTTP 允许列表的影响

高级示例

本示例针对 hasuragraphql 后端。但您也可以根据所连接的协议进行编辑。如上图所示,这可以是简单的从后端服务发送和接收文本。

using Sandbox;
using Sandbox.UI.Construct;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Text.Json;

public class Backend: Entity
{
	public Backend() {
		socket = new WebSocket(); // 初始化 websocket
	}  

	public WebSocket socket = null;

	// 通过 websocket 发送简单对象
	private async Task SendMessage() {
		var randomPayload = new {
			message: "how cool"
		};
		// 将对象序列化为字符串,通过 websocket 发送
		string jsonString = JsonSerializer.Serialize(randomPayload);

		// 发送
		await socket.Send(jsonString);
	}

	// 处理收到的信息
	private void HandleMessageReceived(string data) {
		Log.Info(data);
	}

	private async Task ConnectToBackend() {
		// Set your socket protocol 
		socket.AddSubProtocol("graphql-ws");

		// Add function to handle received messages
		socket.OnMessageReceived += HandleMessageReceived; 
		
		// Connect!
		await socket.Connect("wss://your-websocket-endpoint");

		// My protocol requires an initial connection payload to fully connect to backend
		var connectionPayload = new {
			type = "connection_init",
			payload = new {
				lazy = true,
			}
		};

		// Serialize an object to a string to send over the websocket
        string jsonString = JsonSerializer.Serialize(connectionPayload);
		await socket.Send(jsonString);
	}

	
}
Page views: 1,915