【问题标题】:WebSockets - How to create different messages?WebSockets - 如何创建不同的消息?
【发布时间】:2011-11-24 12:30:08
【问题描述】:

我正在创建一个 websocket 聊天应用程序,并且我设法将聊天消息中继到其他连接的浏览器。我有一个正在监听一个端口的控制台应用程序。

我的问题是...如果有人登录系统,我希望每个人都知道,我该怎么做?我正在使用 Linq 映射数据库,但如果日志记录正常,我该如何发送该消息,该用户 X 已登录?

我终于能够使用 websockets 创建一个聊天室,这是最终产品,感谢您的指导!

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

【问题讨论】:

    标签: c# asp.net websocket


    【解决方案1】:

    首先确保您以 JSON(JavaScript 对象表示法)发送消息,因为这允许来回发送结构化数据,并且客户端和服务器可以区分聊天消息和指令(例如新登录的人) .例如在客户端:

    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 类所做的。

    在此处查看 Paul Batum 在 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)

    【讨论】:

    • 铁!这正是我所需要的!非常感谢您为我指明正确的方向!我将尝试实施这种方法!这是我的论文!如果我有任何疑问,我可以在这里问你吗?提前谢谢哥们!
    【解决方案2】:

    使用 PostgreSQL 时,您可以在数据库中使用 NOTIFY 通知应用层,应用层可以生成通过 WebSockets 发送的消息。

    【讨论】:

      【解决方案3】:

      您需要在应用程序级别跟踪连接,以便发送给所有连接。但是请查看SignalR,而不是为您编写与 webSockets 和长轮询有关的大量工作。使用 SignalR,您可以使用 GetClients 将所有客户端连接到 Hub

      【讨论】:

        猜你喜欢
        • 2017-11-12
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 2015-12-23
        • 2010-09-06
        • 1970-01-01
        相关资源
        最近更新 更多