问题描述
我对SSE(或一般的Web开发)完全没有经验,所以请原谅我对显示的无知。我试图从Unity中C#中的SSE流中获取onmessage
事件。我需要它连续运行(最好是异步运行),因为这些事件不断发生。
对于上下文,我尝试从以下事件获取事件: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上找到了一些示例代码(下面的代码)。这样可以正常工作,并且可以为我提供正确的数据,但是我不了解(如果有的话)我只能如何像这样提供的JS那样获得onmessage
事件。显然,这段代码只是将应用程序锁定在当前状态。
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,2048);
if (length > 0)
{
var text = encoder.GetString(buffer,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 Request方法有所帮助?也非常欢迎其他方法或库的建议...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)