Вопрос по signalr, asp.net-mvc-3, chatroom, livechat, chat – SignalR несколько чатов

6

Я планирую создать приложение для чата, и я прочитал, чтоSignalR это одна из лучших технологий для применения.

Я видел примеры этого, но у них есть только один чат.

Я хочу иметь несколько чатов. Пользователь просто выберет один из этих чатов.

Хотя я новичок, я думаю, что создать единую комнату чата в 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 = отдельная комната чата (я не уверен)

Так что, если у меня много подключений (например, connection1, connection2, connection3 ....), у меня может быть несколько чатов?

Еще раз, я не уверен, если это правильно ... Пожалуйста, помогите мне о том, как реализовать несколько чатов ...

(PS: я видел JABBR, но его код вызывает у меня кровотечение из носа. Можете ли вы привести простые примеры, пожалуйста?)

Ваш Ответ

3   ответа
15

Вам не нужно открывать несколько соединений, только одно, но использовать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);
    }
}

Одна группа означает одну комнату, поэтому каждый раз, когда один пользователь присоединяется к одной комнате, вы просто добавляете этого пользователя в группу этой комнаты, а когда вы хотите передать сообщение, просто отправьте сообщение клиентам в группе.

Больше деталей: https://github.com/SignalR/SignalR/wiki/Hubs

полезно, но я не знаю, как работать с задачей raberana
2

Хорошо ... Вот самый простой способ сделать несколько комнат:

$(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 вернет два значения каждому клиенту, одно - это сообщение, другое - комната ... Теперь мы сравним возвращаемую "комнату". в текущую комнату клиента. Как только они совпадут, сообщение будет отображаться в этой текущей комнате:

if ($('#currentRoom').val() == room) {
    $('#messagesList').append('<li>' + message + '</li>');
}
Этот подход работает, но он отправляет сообщение всем подключенным клиентам. Используя группы, вы можете связаться только с клиентами, подключенными к определенной комнате.
-1

Вам не нужно несколько подключений. Просто используйте один из них и поместите метаданные в возвращаемое сообщение JSON относительно того, для какой комнаты это сообщение. Затем JavaScript-код должен направить сообщение в нужную комнату.

Чтобы увидеть некоторые работающие примеры или демонстрации бесплатных чатов онлайн, это поможет вамtalkwithstranger.com/free-chat-rooms
Я не знаю, как настроить несколько комнат. какую часть кода мне нужно изменить? raberana

Похожие вопросы