我们可以在 WebForms 中将 SignalR 与 WebRTC 视频通话一起使用吗

svy*_*vyc 5 c# asp.net webforms signalr webrtc

因为我是新手,所以可能很愚蠢。我想在我的 ASP.NET WebForms 项目中为注册和在线用户包含使用 SignalR 的 WebRTC 视频通话功能。我尝试了一个多星期的时间来搜索在 Webforms 中使用 SignalR 和 WebRTC 的演练/示例,但我总是在 MVC 中找到示例。我们不能在 WebForms 中使用 SignalR 和 WebRTC 吗?如果我们可以使用,那么任何人都可以提供/帮助我提供一个非常简单和基本的演练/示例。

Ben*_*ent 6

逻辑与signalR 教程非常相似。除了您的消息是 WebRTC 需要通信才能连接的消息。

这是我写的一个例子。它向通过 signalR 集线器连接的所有客户端进行广播。然而,将其设置为仅某些用户与其他用户通信是非常简单的。这是一个更简洁的示例,但它使用 MVC

客户端完成的基本信令逻辑:

<script type="text/javascript">
        var signal = $.connection.webRTCHub;
        var ready = false;
        //set our client handler
        signal.client.broadcastMessage = function (from, message) {
            //handle your message that you received
        }

       //start the hub for long polling so it does not close    
       $.connection.hub.start({ transport: ['longPolling'] }).done(function () {
            ready = true;
        });
        //only send a message when we are ready
        var sendMessage = function (message) {
            if (!ready)
                setTimeout(sendMessage, 100, message);
            else
                signal.server.send(name, message);
        }

    </script>
Run Code Online (Sandbox Code Playgroud)

转发消息的基本集线器类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace SignalRWebRTCExample
{
    public class WebRTCHub : Hub
    {
        //executed from javascript side via signal.server.send(name, message);
        public void Send(string from, string message)
        {
            //Code executed client side, aka, makes message available to client
            Clients.All.broadcastMessage(from, message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

启动信号器的基本启动类

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRWebRTCExample.Startup))]

namespace SignalRWebRTCExample
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

免责声明:这非常粗糙,但示例“有效”(流在客户端之间发送)。这段代码没有优化,也不理想。SignalR 中有许多很棒的功能没有被利用,但这些功能可能会使其变得更好、更高效。