2011-09-25 87 views
1

我正在創建一個websocket聊天應用程序,我設法將聊天消息轉發給其他連接的瀏覽器。我有一個控制檯應用程序在一個端口上偵聽。WebSockets - 如何創建不同的消息?

我的問題是......如果一個人登錄系統,我希望每個人都知道,我該怎麼做?我使用Linq來映射數據庫,但如果日誌記錄正常,我該如何發送該消息,該用戶X已登錄?

最後我能夠使用websockets創建聊天室,這裏是最終產品,感謝您的定位!

http://ukchatpoint.no-ip.org/Chatpoint/Pages/Uklobby.aspx

回答

4

首先確保你發送的消息是JSON(JavaScript Object Notation),因爲這樣可以讓結構化數據來回發送,並且客戶端可以區分聊天消息和指令(例如,某個新登錄的)。例如在客戶端上:

mySocket.onmessage = function(event) { 
    var command = JSON.parse(event.data); 

    if(command.type === 'message') { 
     var message = command.message; 
     // handle chat message 
    } 
    else if (command.type === 'newUser') { 
     var username = command.username; 
     // handle new user 
    } 
}; 

在ASP.NET中C#中的服務器你會送他們爲:

public class ChatHandler : WebSocketHandler 
{ 
    private JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    private static WebSocketCollection chatapp = new WebSocketCollection(); 

    public override void OnMessage(string message) 
    { 
     var m = serializer.Deserialize<Message>(message); 

     switch (m.Type) 
     { 
      case MessageType.NewUser: 
       chatapp.Broadcast(serializer.Serialize(new 
       { 
        type = "newUser", 
        username = m.username 
       })); 

       break; 
      case MessageType.Message: 
       chatapp.Broadcast(serializer.Serialize(new 
       { 
        type = "message", 
        message = m.message 
       })); 

       break; 
      default: 
       return; 
     } 
    } 
} 

由於Hightechrider說,你需要保持一個列表的軌道連接的客戶端,這就是WebSocketCollection類在上面的代碼清單中所做的。

在github退房保羅 - 巴圖姆的WebSocket的聊天例子這裏(https://github.com/paulbatum/BUILD-2011-WebSocket-Chat-Samples/blob/master/BasicAspNetChat/ChatHandler.cs

此外,他在這裏的最近MS BUILD大會(http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-807T

+0

鐵!這正是我所需要的!非常感謝您指點我正確的方向!我會盡力實施這種方法!這是我的論文!如果我有任何疑問,我可以在這裏問你嗎?在此先感謝您的朋友! – MRFerocius

3

您需要跟蹤應用程序級別的連接,使您可以發送給所有的人。但看看SignalR,而不是爲webSockets和長輪詢所涉及的許多工作。使用SignalR,您可以使用GetClients獲取連接到Hub的所有客戶端。

+0

實施SignalR在這一點上做了演示。這很棒! – MRFerocius

0

當使用PostgreSQL時,您可以使用數據庫內的NOTIFY通知應用層,該層可以生成通過WebSocket發送的消息。