2017-04-21 5 views
1

だから私は、私のページを訪問し、私はこの使用してビデオモードを設定するとき:SignalR JSコマンドは、WebSocketを初めて上で実行されません(vb.net)

$("#pushStreamButton").click(function() { 
    if (initialized) { 
     var channelSelected = $("#channelSelect").val(); 
     var gameNameEntered = $("#gameName").val(); 
     var channelNameEntered = $("#channelName").val(); 
     if (gameNameEntered.length < 1) return; 
     $("#goLiveWindow").dialog("close"); 
     serverHub.server.setVideoMode(channelSelected, gameNameEntered, "", channelNameEntered); 
    } 
}); 

を、これはバックエンドである

予想通り
Public Sub setVideoMode(ByVal mode As String, ByVal details As String, ByVal socialMessage As String, ByVal channel As String) 
    Dim user As FrontPageUser = Connections.matchFirst(Connections.frontPageUsers, Context.ConnectionId) 
    If user Is Nothing Then Return 
    If mode = "youtube" Then 
     Try 
      My.Computer.FileSystem.DeleteFile(HttpContext.Current.Server.MapPath("/images/streamavatar.gif")) 
     Catch Ex As Exception 
      Console.Write(Ex) 
     End Try 
    End If 

この機能、それが仕事だん、しかし、私は戻って、デフォルトのユーチューブ

$("#stopStreamButton").click(function() { 

     serverHub.server.setVideoMode("youtube", "", "", ""); 

}); 
へのチャネルを元に戻しボタンを持っています0最初のボタンを使用してチャンネルを変更した後、2番目のボタンをクリックしても何も起こりません。コマンドを実行しようとしても奇妙です。しかし、ページをリロードすると、ボタンが正しく機能し、チャンネルが元に戻ります。

SSE/longpolling/foreverframeを使用している場合、この問題は存在しません。この問題は、トランスポートとしてWebソケットを使用している場合にのみ発生します。私はWebSocketを使って比較的知られていない水域を歩いています.JavaScriptとバックエンドコードをデバッグしようとしました.JavaScriptは正しく実行されていないようですが、エラーは出ません。

なぜこのようなことが起こっているのか分かっていて、どこに間違っているのか説明できれば、それは分かります。

追加:実際にはJava側からすべての機能を停止しているように見えますが、しばらくして接続を解除して強制的にリフレッシュするように見えますが、何が原因なのかわかりませんが、ウェブソケット。

編集 -

原因をデバッグする際に、私がこの機能を無効にすると、それは、コマンドをぶら下げ、ブロッキングなしで動作しますが、加入者にプッシュ通知を送信し、他の機能にリンクされているように見えるが、この機能が初期化されるときそれは関数がそう

Shared Function sendPushFox(username, pushDetails) As String 
    Dim avatar = Utils.getAvatarPath(username) 
    If avatar.Contains("/forum/download/file.php?avatar=") OrElse avatar.Contains("/images/solaire.png") Then 
     Try 
      My.Computer.Network.DownloadFile("https://foo.com" & avatar, HttpContext.Current.Server.MapPath("/images/streamavatar.gif")) 
     Catch ex As Exception 
      ChatProcessor.postNewMessage(Nothing, Nothing, ChatMessage.MessageType.Channel_Mod, "Problem downloading streamer avatar." & ex.ToString) 
     End Try 
    Else 
     Try 
      My.Computer.Network.DownloadFile(avatar, HttpContext.Current.Server.MapPath("/images/streamavatar.gif")) 
     Catch ex As Exception 
      ChatProcessor.postNewMessage(Nothing, Nothing, ChatMessage.MessageType.Channel_Mod, "Problem downloading streamer avatar." & ex.ToString) 
     End Try 
    End If 
    Dim query As String = "SELECT subscribeid FROM custom_user_data WHERE NOT subscribeid = ' ';" 
    Dim connection As New MySqlConnection(Utils.connectionString) : connection.Open() 
    Dim command As MySqlCommand = New MySqlCommand(query, connection) 
    Dim reader As MySqlDataReader = command.ExecuteReader() 
    Dim regList As New List(Of String) 
    Do While reader.Read 
     regList.Add(reader.GetString(0)) 
     ' IO.File.AppendAllText(Utils.serverPath & "errorlog.txt", reg1) 
    Loop 
    connection.Close() 
    Dim query2 As String = "SELECT p256dh FROM custom_user_data WHERE NOT p256dh = ' ';" 
    Dim connection2 As New MySqlConnection(Utils.connectionString) : connection2.Open() 
    Dim command2 As MySqlCommand = New MySqlCommand(query2, connection2) 
    Dim reader2 As MySqlDataReader = command2.ExecuteReader() 
    Dim regList2 As New List(Of String) 
    Do While reader2.Read 
     regList2.Add(reader2.GetString(0)) 
     ' IO.File.AppendAllText(Utils.serverPath & "errorlog.txt", reg1) 
    Loop 
    connection2.Close() 
    Dim query3 As String = "SELECT authsecret FROM custom_user_data WHERE NOT authsecret = ' ';" 
    Dim connection3 As New MySqlConnection(Utils.connectionString) : connection3.Open() 
    Dim command3 As MySqlCommand = New MySqlCommand(query3, connection3) 
    Dim reader3 As MySqlDataReader = command3.ExecuteReader() 
    Dim regList3 As New List(Of String) 
    Do While reader3.Read 
     regList3.Add(reader3.GetString(0)) 
     ' IO.File.AppendAllText(Utils.serverPath & "errorlog.txt", reg1) 
    Loop 
    connection3.Close() 
    Dim reg1 = regList.ToArray 
    Dim reg2 = regList2.ToArray 
    Dim reg3 = regList3.ToArray 
    Dim payload = "{ ""title"": ""foo bar"",  ""body"": """ & username.name.ToString & " playing " & pushDetails.ToString & """, ""icon"" : ""https://foo.com/images/streamavatar.gif"" }" 
    For i As Integer = 0 To reg1.Length - 1 
     Dim webPushClient = New WebPushClient() 

     Dim subject = "https://foo.com" 
     Dim vapidKeys As VapidDetails = VapidHelper.GenerateVapidKeys() 
     Dim vapidDetails = New VapidDetails(subject, vapidKeys.PublicKey, vapidKeys.PrivateKey) 
     Try 
      Console.WriteLine("Public {0}", vapidKeys.PublicKey) 
      Console.WriteLine("Private {0}", vapidKeys.PrivateKey) 
      Dim subscription = New PushSubscription(reg1(i), reg2(i), reg3(i)) 

      webPushClient.SetGCMAPIKey("key here") 
      webPushClient.SendNotification(subscription, payload, vapidDetails) 

     Catch Ex As Exception 
      Console.Write(Ex) 
     End Try 
    Next 
    Return Nothing 
End Function 

を完了した一見した後、それはlongpollingとなどに機能するためには、WebSocketをとの衝突だけど、私は、なぜまだわからないんだけど、それが唯一の関数を呼び出すユーザーに影響を及ぼし、ハング。

は、不思議なことに、これは、ここで完全に罰金

 For i As Integer = 0 To reg1.Length - 1 
      webPushClient.SetGCMAPIKey("key here") 
      webPushClient.SendNotification(subscription, payload, vapidDetails) 
     Next 

その機能をたまたま「次」の後にハングアップしたように見えるが、それはのための終わりに達すると、それが続くことはありませんただ、それは後に、文字通り何もしません次に、何も起こりません、何も起こりません、ブレークと結果が期待どおりになっている、私はなぜそれが続かない、そしてウェブソケットのtrasports、longpollingなどを使用しているだけでうんざりしています

答えて

0

私は実際にこれを、ウェブソケットはコマンドから作られた非同期通信を好まないことが分かります

webPushClient.SendNotification(subscription, payload, vapidDetails) 

は幸いwebPush 11bが非同期と

webPushClient.SendNotificationAsync(subscription, payload, vapidDetails) 

固定すべてにそれを変更することがあります。

関連する問題