0

假设在多用户应用程序上,同一请求可能由多个用户同时发起,这些请求最终将是对某些服务器端操作的一些 ajax 调用,我们有一个由该操作/方法执行的例程在服务器上如下:

例行任务:它负责重新排序,假设项目没有相互连接,没有双链表数据结构,但所有项目默认都有一个假定的排序,并按该顺序表示给用户,当这些 ajax 调用启动添加项、删除项或更新项操作时,排序将不同,因为条目就像 FIFO。

目前我需要更新所有记录,orderNumber 列以跟踪所有更改,在更新操作中,因为项目在用户界面中是可移动的,并且用户具有拖放交互的功能,项目可以向上或向下原始有序列表并更改这些排序。

作为跟踪这些排序更改的最有效方法,您会建议什么方法,这种方法在服务器上的性能成本最低,并为用户保持可接受的用户交互?

开发平台为 ASP.NET MVC4,持久化使用 SQL Server

编辑:

在阅读第一个答案后,我不得不提到一个事实,即问题不是从服务器为所有用户发布的实时或多播消息,也不是由一个用户发起的更改发布以广播给所有其他用户. 项目是用户特定的,有些用户可能有数百个项目,有些可能只有少数或更少

4

1 回答 1

0

我肯定会看SignalR(或任何等效技术,但由于您在 .net 堆栈中,因此感觉更自然)。

在 SignalR 中,您可以创建集线器,跟踪连接到该集线器的客户端,甚至创建用户组。您可以从服务器端(通过获取集线器上下文)或任何客户端向该集线器发送消息。

如果您连接了 N 个用户,则导致对屏幕中的元素重新排序的每个拖放操作都将引用从用户发送的执行重新排序的消息,以让其他客户端知道顺序已更改。收到此类“orderChanged”消息的用户然后可以向服务器发出 ajax 调用以获取最新消息。

编辑:

即使它不是多播,正如下面的第一条评论所阐明的那样,SignalR 也很适合。在您的集线器中,您可以跟踪用户连接(复数,因为单个用户可以从不同的客户端登录)并根据更改的内容单独发送消息。

当主管更改用户的 ToDo 列表时,您可以调用受影响用户正在使用的客户端上的方法,因此他知道他的列表已更改。

使用相同的概念,如果同一用户更改了自己的 ToDo 列表,您可以向其他客户端发送消息。

SignalR非常灵活,只要您查看文档就会清楚。

于 2013-08-20T12:43:45.360 回答