Skip to main content
 首页 » 编程设计

c#之WebSockets之如何创建不同的消息

2024年01月25日26jyk

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

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

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

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

请您参考如下方法:

首先确保您以 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 所说,您需要跟踪已连接客户端的列表,这就是上面代码 list 中的 WebSocketCollection 类所做的。

在此处查看 Paul Batum 在 github 上的 WebSocket 聊天示例 (https://github.com/paulbatum/BUILD-2011-WebSocket-Chat-Samples/blob/master/BasicAspNetChat/ChatHandler.cs)

他还在最近的 MS BUILD session 上发表了演讲 (http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-807T)