SignalR - 信号器/集线器文件

时间:2016-03-02 21:08:49

标签: signalr

有人可以向我解释信号器/集线器文件的工作原理吗?

阅读文档后,它说该文件是在运行时生成的。但是,当我第一次加载网站时,您将其包含在所有其他javascript文件中,例如

<script src="Scripts/jquery-1.10.2.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.1.2.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>

这是如何运作的?

我根本无法在磁盘上找到该文件,那么Web浏览器如何能够像这样请求它?

感谢您的解释!

2 个答案:

答案 0 :(得分:7)

就像文档说的那样,JS是自动生成的。文件本身不会存储在文件系统中,而是根据请求(可能已缓存)生成到/signalr/hubs位置。

在浏览器中输入http://myServer:port/signalr/hubs,您就会看到js文件的样子。

原则与每个Web应用程序相同:您导航到页面时所看到的确切文件不是文件系统中某个文件的副本,而是它的结果服务器代码正在运行。安装SignalR会设置一个路径来处理对/signalr/hubs发出的请求,并在被请求时返回组成JS文件的字符串。

此代码配置为在您将SignalR dll添加到项目时运行,并在执行以下语句时准备服务器以使用SignalR,通常在Startup.cs或您的Owin启动类中。

app.MapSignalR();

答案 1 :(得分:2)

<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>

文档说明它是一个自动生成的文件,这意味着我们的项目中实际上不存在该文件。 实际上,当请求发送到服务器时会生成运行时。

 $(function () {
        // Declare a proxy to reference the hub. 
        var chat = $.connection.chatHub;

        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                // Call the Send method on the hub. 
                chat.server.send($('#displayname').val(), $('#message').val());                                       
            });
        });
    });

当上述请求发送到服务器时,可以在浏览器中使用下面的URL看到服务器的进一步过程,如#DLeh的回答所述。

http://myServer:port/signalr/hubs

也可以在控制台面板中观察到。

如需进一步指导,您可以使用以下链接。

https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server