Несколько номеров SignalR чат
Я планирую создать приложение чата, и я читал, что помощью 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 ответов
вам не нужно открывать несколько соединений, только одно, но использовать 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
- ладно... Вот самый простой способ сделать несколько комнат:
$(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" />
Теперь, каждый раз .отправить называется, мы передадим не только сообщение, но и текущую комнату...
The .addMessage вернет каждому клиенту два значения: одно-сообщение, другое-комната... Теперь мы сравним возвращенную "комнату" с текущий номер клиента. Как только они совпадут, сообщение будет отображаться в этой текущей комнате:
if ($('#currentRoom').val() == room) {
$('#messagesList').append('<li>' + message + '</li>');
}
вам не нужно несколько соединений. Просто используйте один и поместите метаданные в возвращенное сообщение JSON о том, для какой комнаты предназначено сообщение. Затем код JavaScript должен направить сообщение в нужную комнату.