从 REST 和服务器与客户端事件的角度理解 websocket

Posted

技术标签:

【中文标题】从 REST 和服务器与客户端事件的角度理解 websocket【英文标题】:Understanding websockets in terms of REST and Server vs Client Events 【发布时间】:2015-06-05 02:53:24 【问题描述】:

一段时间以来,我一直在我的项目设计中实现 RESTful API,因为在我的情况下,其他人能够以一致的格式与数据交互非常有用(我发现 REST 是处理请求的干净方式)。我现在不仅尝试为我的资源提供当前的 REST API,还尝试通过双向 websocket 连接公开一些信息。

在搜索实现 websocket 协议的良好 .net 库后,我确实发现了 SignalR。我遇到了一些问题(可能是我的项目特有的?)

我希望能够通过我的 现有的 REST API。 (我不知道这样做的正确做法,但是 我认为自定义标题可以正常工作)我想要它们( 客户端)能够关闭连接并获得http响应 返回 (101?) 表示完成。

SignalR 遇到的问题是:

在集线器实例之外没有干净的方法来获取用户的连接 ID 并将其映射到外部控制器,其中进行的其余调用会影响将哪些数据广播到特定客户端(我不想使用外部存储器) 对客户端代码的巨大依赖。我真的想让这个过程对客户端来说很简单,并在服务器端处理大部分工作(我希望修改我当前的 rest api 就能完成)。我看到客户的唯一责任是和平断开连接。

所以现在的问题..

.net 是否有一个很好的服务器端 websocket 库来实现最新的 web socket 协议?客户端可以使用任何遵守该协议的客户端库。将 Web 套接字连接和 restful api 结合起来的最佳做法是什么?

【问题讨论】:

【参考方案1】:

ASP.NET supports WebSockets itself 如果您有 IIS8(仅限 Windows 8/2012 及更高版本)。 SignalR 只是一个 polyfill,

如果你没有 IIS8,你可以使用像我这样的外部 WebSocket 框架:http://vtortola.github.io/WebSocketListener/

干杯。

【讨论】:

在实现 ApiController 的控制器中,我们如何访问 HttpContext?请求进来并有一个 OWIN HttpRequestContext。 我尝试实现,但由于某种原因,我的 HttpContext.Current 始终为空。 ApiController 中没有HttpContext 属性吗? 不只是 HttpRequestContext 等一下,如果您使用的是 OWIN 主机,那不是 IIS。我不知道它是如何与 OWIN 一起工作的。

以上是关于从 REST 和服务器与客户端事件的角度理解 websocket的主要内容,如果未能解决你的问题,请参考以下文章

Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

Android事件分发机制完全解析,带你从源码的角度彻底理解

REST及REST风格的Web服务与ArcGIS Server REST风格的Web服务 一

REST

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

(转) Android事件分发机制完全解析,带你从源码的角度彻底理解(上)