10

チャット アプリケーションの作成を計画していますが、SignalRは適用するのに最適なテクノロジの 1 つであることを読みました。

例を見たことがありますが、チャット ルームは 1 つしかありません。

複数のチャットルームを持ちたい。ユーザーは、これらのチャット ルームの 1 つを選択するだけです。

私は初心者ですが、SignalR で単一のチャット ルームを作成するには、次の方法があると思います。

<script type="text/javascript">
    $(function () {
        var connection = $.connection.communicator;
        connection.receive = function (from, msg) {
            $("#chatWindow").append("<li>" + from + ": " + msg + "</li>");
        };
        $.connection.hub.start();

        $("#btnSend").click(function () {
            connection.broadcast($("#txtName").val(), $("#txtMsg").val());
        });
    });
</script>

var connection = シングル チャット ルーム (よくわかりません)

多数の接続 (たとえば、接続 1、接続 2、接続 3....) がある場合、複数のチャット ルームを持つことができますか?

繰り返しますが、これが正しいかどうかわかりません...複数のチャットルームを実装する方法を教えてください...

(追伸: JABBR を見たことがありますが、そのコードに鼻血が出ています。簡単な例を教えてください。)

4

4 に答える 4

20

複数の接続を開く必要はありません。1 つだけですが、次を使用しますGroup

public class MyHub : Hub, IDisconnect
{
    public Task Join()
    {
        return Groups.Add(Context.ConnectionId, "foo");
    }

    public Task Send(string message)
    {
        return Clients["foo"].addMessage(message);
    }

    public Task Disconnect()
    {
        return Clients["foo"].leave(Context.ConnectionId);
    }
}

1つのグループは1つの部屋を意味するので、1人のユーザーが1つの部屋に参加するたびに、そのユーザーをその部屋のグループに追加し、メッセージをブロードキャストしたい場合は、グループ内のクライアントにメッセージを送信するだけです.

詳細: https://github.com/SignalR/SignalR/wiki/Hubs

于 2012-06-25T03:01:02.957 に答える
3

わかりました...複数の部屋を作る最も簡単な方法は次のとおりです。

$(function () {
    var chat = jQuery.connection.chat;

    chat.addMessage = function (message, room) {

        if ($('#currentRoom').val() == room) {
            $('#messagesList').append('<li>' + message + '</li>');
        }
    };

    chat.send($('#textboxMessage').val(), $('#currentRoom').val());
    $('#textboxMessage').val("");

    $.connection.hub.start();
});


public class Chat : Hub
{
   public void Send(string msg, string room)
   {
       Clients.addMessage(msg, room);
   }
}

利用可能な部屋のドロップダウンリストがあり、選択された部屋は要素の値になります。たとえば、テキストボックスとしましょう:

 <input type="text" readonly="readonly" id="currentRoom" />

これで、.send が呼び出されるたびに、メッセージだけでなく、現在の部屋も渡されます...

.addMessage は、すべてのクライアントに 2 つの値を返します。1 つはメッセージ、もう 1 つは部屋です。次に、返された「部屋」をクライアントの現在の部屋と比較します。それらが一致すると、その現在の部屋にメッセージが表示されます。

if ($('#currentRoom').val() == room) {
    $('#messagesList').append('<li>' + message + '</li>');
}
于 2012-06-26T04:52:51.817 に答える
-2

複数の接続は必要ありません。1 つを使用して、返された JSON メッセージにメタデータを入れて、メッセージがどの部屋用であるかを示します。次に、JavaScript コードでメッセージを正しいルームに送信する必要があります。

于 2012-06-24T14:50:40.487 に答える