実現したいこと
ASP.NET Webformで、SignalRを使ってチャットツールの様なものを作っています。
ユーザーの登録などは行わず、URLに付与されたパラメータ文字列が同一のクライアント間でやり取りを行いたいです。
イメージとしては、「https://test.com/chat.aspx?room=aaaaa」の「aaaaa」
の部分が同一のページ同士でのみのやり取りです。
発生している問題・分からないこと
該当ページ全てにチャットを送ることはできていますが、パラメータなど任意のキーを指定して送る実装方法がわかりません。
可能であればサンプルコードや詳しい記事など教えていただけますと幸いです。
※記載のソースコードはテストのためにhtmlで記載していますが、本番はaspxで作成します。
該当のソースコード
html
1<!DOCTYPE html> 2<html> 3<head> 4 <title>SignalR Chat</title> 5</head> 6<body> 7 <input type="text" id="message" /> 8 <input type="button" id="sendButton" value="Send" /> 9 <ul id="messagesList"></ul> 10 11 <script src="Scripts/jquery-3.4.1.min.js"></script> 12 <script src="Scripts/jquery.signalR-2.4.3.min.js"></script> 13 <script src="signalr/hubs"></script> 14 <script type="text/javascript"> 15 $(function () { 16 var connection = $.hubConnection(); 17 18 var chat = connection.createHubProxy("chat"); 19 20 chat.on("ReceiveMessage", function (message, time) { 21 var encodedMsg = time + " : " + message; 22 var li = document.createElement("li"); 23 li.textContent = encodedMsg; 24 document.getElementById("messagesList").appendChild(li); 25 }); 26 27 $("#sendButton").click(function () { 28 var text = $("#message").val(); 29 30 $("#message").val(""); 31 32 chat.invoke("SendMessage", text); 33 }); 34 35 connection.start(); 36 }); 37 </script> 38</body> 39</html>
HubClass
1[HubName("chat")] 2public class ChatHub : Hub 3{ 4 public void SendMessage(string text) 5 { 6 Clients.All.ReceiveMessage(text, DateTime.Now.ToLongTimeString()); 7 } 8}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
色々調べて見たところ「Clients.User(userId).send(message);」のようにユーザーIDをキーに送信することが出来るということは分かりました。
ただ今回の場合、ユーザー登録は行わず、可能であればDBも使いたくありません。
ブラウザを閉じた場合はチャットの履歴は見られなくなる仕様と考えています。
補足
ASP.Net .net Framework4.8
VisualStudio2022
Asp.Net.SignalR 2.4.3
経験が浅くご迷惑おかけしますが、よろしくお願いいたします。
不足情報があれば追記しますのでご教授ください。
回答1件
あなたの回答
tips
プレビュー