2012-06-24 40 views
5

Tôi đang lập kế hoạch tạo ứng dụng trò chuyện và tôi đã đọc rằng SignalR là một trong những công nghệ tốt nhất để áp dụng.SignalR nhiều phòng chat

Tôi đã xem các ví dụ về nó, nhưng họ chỉ có một phòng trò chuyện.

Tôi muốn có nhiều phòng trò chuyện. Người dùng sẽ chỉ chọn một trong những phòng trò chuyện đó.

Mặc dù tôi là một người mới bắt đầu, tôi nghĩ rằng để tạo ra một phòng chat đơn trong SignalR là của thành viên này:

<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 kết nối = phòng chat đơn (Tôi không chắc chắn)

Vì vậy, nếu tôi có nhiều kết nối (ví dụ, connection1, connection2, connection3 ....) tôi có thể có nhiều phòng chat?

Một lần nữa, tôi không chắc chắn nếu điều này là đúng ... Xin hãy giúp tôi về cách thực hiện nhiều phòng chat ...

(PS: Tôi đã thấy JABBR, nhưng mã của nó là làm cho mũi của tôi chảy máu. Bạn có thể cung cấp các ví dụ đơn giản không?)

Trả lời

14

Bạn không cần phải mở nhiều kết nối, chỉ là một, nhưng để sử dụng 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); 
    } 
} 

Một nhóm có nghĩa là một căn phòng, vì vậy mỗi khi một người dùng tham gia một phòng, bạn chỉ cần thêm người dùng đến nhóm của căn phòng đó và khi bạn muốn phát sóng tin nhắn, chỉ cần gửi tin nhắn cho khách hàng trong nhóm.

Thông tin chi tiết: https://github.com/SignalR/SignalR/wiki/Hubs

+0

cũng hữu ích, nhưng tôi không biết cách làm việc với Task –

-1

Bạn không cần nhiều kết nối. Chỉ cần sử dụng một và đặt dữ liệu meta trong thông báo JSON được trả về như thông báo cho phòng nào. Sau đó, mã JavaScript cần truyền thông điệp vào đúng phòng.

+0

tôi không biết cách thiết lập nhiều phòng. phần nào của mã tôi cần sửa đổi? –

+0

Để xem một số ví dụ làm việc hoặc bản demo của các phòng chat trực tuyến miễn phí, điều này sẽ giúp bạn http://talkwithstranger.com/free-chat-rooms – Faizan

1

Được rồi ... Đây là cách đơn giản nhất để làm nhiều phòng:

$(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); 
    } 
} 

tôi có một danh sách thả xuống phòng có sẵn, và các phòng được lựa chọn sẽ là giá trị của một phần tử, giả sử một hộp văn bản:

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

Bây giờ, mỗi lần được gọi, chúng tôi sẽ không chỉ truyền thông điệp mà còn vì vậy phòng hiện tại ...

.addMessage sẽ trả về hai giá trị cho mỗi khách hàng, một là thông báo, phòng còn lại là phòng ... Bây giờ chúng ta sẽ so sánh phòng 'trả về' với phòng hiện tại của khách hàng. Khi chúng khớp, thông báo sẽ được hiển thị trong phòng hiện tại:

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

Cách tiếp cận này hoạt động, nhưng nó sẽ gửi tin nhắn đến tất cả các khách hàng được kết nối. Bằng cách sử dụng Groups, bạn chỉ có thể tiếp cận khách hàng được kết nối với một phòng cụ thể. –

Các vấn đề liên quan