我正在开发一个原型项目,将Mono上运行的自托管SignalR服务器与C#客户端(用于测试)和Unity客户端(代表实际用例场景)连接起来。 Unity客户端使用BestHTTP Pro作为其SignalR库。
由于Mono不支持WebSocket传输方法,我专注于服务器发送的事件,并在那里观察非常奇怪的行为。服务器和C#客户端之间的通信工作正常。但是,对于Unity客户端,(假定的)持久连接在对-script
请求的初始响应之后立即关闭。任何地方都没有报告错误;两种情况下的响应代码都是200。
使用Fiddler进行的进一步调查显示,Unity客户端正在发送C#客户端未发送的/signalr/connect
标头,服务器以{{{ 1}}标题,以及关闭连接(换句话说,与客户端要求它完全相反)。
手动删除保持活动请求标头实际上使所有内容都可以与Unity客户端一起使用。由于这感觉更像是一个奇怪的解决方法而不是正确的解决方案,我的问题是:这个奇怪的服务器端行为是SignalR库中的错误吗?或者Mono可以归咎于此(我怀疑情况可能如此)?我如何深入研究这一点,理想情况下使SSE传输工作没有客户端黑客攻击?
使用的库版本:
供参考,以下是完整的请求/响应标头; Unity / BestHTTP客户端:
Connection: Keep-Alive
C#客户端:
Connection: close
答案 0 :(得分:1)
BestHTTP开发人员。
首先,该插件可以在每个支持的平台上使用WebSocket作为SignalR传输。虽然Unity使用的单声道框架没有WebSocket实现,但插件使用自己的。
服务器发送事件协议没有直接指示应该对此类情况执行的操作,但修改插件的工作方式与其他客户端相同。您可以等待资产商店的下一个版本,或者您可以联系我获取更新的软件包。