Websockets
阅读
2023-08-26更新
最新编辑:TrimesS_
阅读:
更新日期:2023-08-26
最新编辑:TrimesS_
是什么?为什么?
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");
}
}
高级示例
本示例针对 hasura 和 graphql 后端。但您也可以根据所连接的协议进行编辑。如上图所示,这可以是简单的从后端服务发送和接收文本。
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