c# - 如何在 Unity 的 C# 中获取服务器端事件(onmessage)?
问题描述
我对 SSE(或一般的 Web 开发)完全没有经验,所以请原谅我的无知。我试图onmessage
从 Unity 的 C# 中的 SSE 流中获取事件。我需要它持续运行(最好是异步的),因为这些事件不断发生。
对于上下文,我试图从以下位置获取事件:https ://www.blaseball.com/events/streamGameData
我试图在 Javascript 中复制的行为是:
const evtSource = new EventSource(https://www.blaseball.com/events/streamGameData, {});
evtSource.onmessage = function(event) {
var data = JSON.parse(event.data)["value"];
// Use data here
}
到目前为止,我已经尝试过:
网络请求
我在使用 WebRequest 的 Github jist 上找到了一些示例代码(代码如下)。这有效,并给了我正确的数据,但我不明白我如何(如果有的话)只能以onmessage
这种方式获取事件,如提供的 JS。显然,这段代码只是将应用程序锁定在当前状态。
void Main()
{
var request = WebRequest.Create(new Uri(url));
var response = request.GetResponse();
var stream = response.GetResponseStream();
var encoder = new UTF8Encoding();
var buffer = new byte[2048];
while(true)
{
if (!stream.CanRead)
return;
int length = stream.Read(buffer, 0, 2048);
if (length > 0)
{
var text = encoder.GetString(buffer, 0, length);
// Parse...
}
}
}
服务堆栈
我尝试使用 ServiceStack ServerEventsClient
( Link ) 来获取事件。我在 VSCode 中构建了 NuGet 包,并将 .netstandard2.0 构建放在 Unity 的 Plugins 文件夹中。这些包在 Unity 中编译得很好,我可以毫无问题地访问它们的 API。
然而,await client.Connect()
永远不会回来。我承认我并不真正了解这些 API。我使用上面链接中的代码逐字使用Using C# Async/Await friendly API’s
,我也尝试client.Start()
了很好的措施。没有什么。然而,ServiceStack 文档中的一行表明这仅适用于 ServiceStack 服务器?(我对 SSE 了解不够,无法理解其中的区别)
async void Connect()
{
var client = new ServerEventsClient("https://www.blaseball.com/events/streamGameData");
client.OnMessage += (evt) =>
{
Debug.Log("Message!");
};
client.Start();
ServerEventConnect connectMsg = await client.Connect();
// Never gets here...
}
谁能解释我在使用 ServerStack 时做错了什么,或者这条路线是否可行?或者也许对 Web 请求方法有帮助?其他方法或库的建议也非常受欢迎......
解决方案
推荐阅读
- javascript - 在 React 中动态添加子元素(状态数组)
- angular - 当我在 Angular 中调用 API 后初始化套接字时,Websocket 不起作用
- metadata - 更新 Stripe 元数据示例
- apache - htaccess 从 http 重写为 https
- javascript - 使用“getElementById”只让字母&数字&下划线输入
- javascript - React-Native Firebase 身份验证
- c# - 将元素属性绑定到以下元素属性
- java - 在 SQL 中使用批量更新时出现错误 MySQLNonTransientConnectionException
- python - 如何使用 dbus 为函数编写单元测试以从 Spotify 获取信息?
- swi-prolog - swi prolog 中提出的初始化目标