2012-06-24 166 views
5

我打算創建一個聊天應用程序,我讀過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連接=單一的聊天室(我不知道)

所以如果我有很多連接(例如,connection1,connection2,connection3 ....),我可以有多個聊天室?

再次,我不知道這是否是正確的...請幫助我如何實現多個聊天室...

(PS:我看到JABBR,但它的代碼是使我的鼻子你可以提供簡單的例子嗎?)

回答

14

您不必打開多個連接,只是一個,而是利用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

+0

也有幫助,但我不知道如何使用任務 –

-1

你不需要多個連接。只需使用一個,並將元數據放入返回的JSON消息中,以確定該消息適用於哪個房間。 JavaScript代碼則需要將消息引導至正確的房間。

+0

我不知道如何設置多個房間。我需要修改哪部分代碼? –

+0

要查看一些在線免費聊天室的工作示例或演示,這將幫助您http://talkwithstranger.com/free-chat-rooms – Faizan

1

好吧......下面就來讓多個房間,最簡單的方法:

$(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" /> 

現在,每一次的。發送所謂的,我們將通過不只是消息,但人所以目前的房間...

.addMessage將返回兩個值給每個客戶端,一個是消息,另一個是房間......現在我們將比較返回的「房間」到當前房間的客戶。一旦匹配,該消息將顯示在當前房間中:

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

此方法的工作原理,但它會將消息發送給所有連接的客戶端。通過使用組,您只能訪問連接到特定房間的客戶端。 –