2011-09-25 3 views
1

websocket 채팅 응용 프로그램을 만들었으며 연결된 다른 브라우저에 채팅 메시지를 릴레이 할 수있었습니다. 하나의 포트에서 수신 대기 콘솔 응용 프로그램이 있습니다.WebSockets - 다른 메시지를 만드는 방법은 무엇입니까?

내 질문은 ... 한 사람이 시스템에 로그온하면 모두에게 그 사실을 알리고 싶습니다. 어떻게 할 수 있습니까? 나는 DB를 매핑하는 Linq를 사용하고 있지만 로깅이 괜찮 으면 어떻게 그 메시지를 보내면 해당 사용자 X가 로그인 했습니까?

마침내 웹 소켓을 사용하여 대화방을 만들 수있었습니다. 여기 최종 제품, 오리엔테이션에 감사드립니다!

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

답변

4

먼저 JSON (JavaScript Object Notation)으로 메시지를 보내야합니다. 구조화 된 데이터를주고받을 수 있으며 클라이언트 & 서버는 채팅 메시지와 명령어 (예 : 로그인 한 다른 사람)를 구별 할 수 있습니다.). Hightechrider가 말한대로

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; 
     } 
    } 
} 

, 당신의 목록을 계속해야합니다 : 클라이언트의 예를 들어 :로

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#에서 서버에서 당신이 그들을 보낼 것 연결된 클라이언트는 위의 코드 목록에서 WebSocketCollection 클래스의 역할을합니다. 여기 GitHub의에

체크 아웃 폴 배텀의 웹 소켓 채팅 예를

(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

당신은 당신이 그들 모두에게 보낼 수 있도록 응용 프로그램 수준에서 연결을 추적해야합니다. 그러나 webSocket 및 긴 폴링과 관련된 많은 작업이 수행되는 대신에 SignalR을 살펴보십시오. SignalR을 사용하면 GetClients을 사용하여 Hub에 연결된 모든 클라이언트를 가져올 수 있습니다.

+0

구현 SignalR에서 프리젠 테이션을했다. 그것은 굉장! – MRFerocius

0

PostgreSQL을 사용할 때 데이터베이스 내에서 NOTIFY를 사용하여 응용 프로그램 계층에 알릴 수 있습니다. 그러면 웹 소켓을 통해 전송 된 메시지가 생성 될 수 있습니다.

관련 문제