C# 编程HTML5 websocket聊天室

C# 编程HTML5 websocket聊天室,c#,asp.net,html,websocket,C#,Asp.net,Html,Websocket,我想创建基于HTML5WebSocket的HTML5Web多室聊天。 但我需要一些帮助来开始 我想在c#中编写服务器端代码,但我找不到任何教程,说明如何在c#中使用多室聊天websocket服务器 是否有任何服务器已经在.net中实现,或者我可以将其更新为多室聊天 这是一个小项目,一个容纳10人的房间。你能告诉我怎么开始吗 多谢各位 我准备示例代码结构: 主服务器类: class Program { // List of courses, which are currentli

我想创建基于HTML5WebSocket的HTML5Web多室聊天。 但我需要一些帮助来开始

我想在c#中编写服务器端代码,但我找不到任何教程,说明如何在c#中使用多室聊天websocket服务器

是否有任何服务器已经在.net中实现,或者我可以将其更新为多室聊天

这是一个小项目,一个容纳10人的房间。你能告诉我怎么开始吗

多谢各位

我准备示例代码结构:

主服务器类:

    class Program
{

    // List of courses, which are currentli avalible ( REPRESENT CHAT ROOM) 
    protected static ConcurrentDictionary<Course, string> OnlineUsers = new ConcurrentDictionary<Course, string>();

    static void Main(string[] args)
    {
        // Initialize the server on port 81, accept any IPs, and bind events.
        var aServer = new WebSocketServer(81, IPAddress.Any)
        {
            OnReceive = OnReceive,
            OnSend = OnSend,
            OnConnected = OnConnect,
            OnDisconnect = OnDisconnect,
            TimeOut = new TimeSpan(0, 5, 0)
        };

        aServer.Start();

        // Accept commands on the console and keep it alive
        var command = string.Empty;
        while (command != "exit")
        {
            command = Console.ReadLine();
        }

        aServer.Stop();
    }

    // event when the clients connect to server 
    // Server send to client list of Lessons which are avalible, after 
    private static void OnConnect(UserContext context)
    {
        throw new NotImplementedException();
    }

    // event whent the client, want to disconnect from server
    private static void OnDisconnect(UserContext context)
    {
        throw new NotImplementedException();
    }

    // event, when client is sending some data
    private static void OnSend(UserContext context)
    {
        throw new NotImplementedException();
    }

    // event, when server receive data from client
    // client choose which room want to join and, we add cleint to list of lessons which he choose
    // another method ... Register, Rename, LogOff ...
    private static void OnReceive(UserContext context)
    {
        throw new NotImplementedException();
    }
}

对我来说,这是一个很好的结构?我有很多课程(房间),有一个老师,一门课可以有20个学生。。在一门课程中,学生可以使用聊天(网络插座)和绘图板与技术人员交谈

这就是我构建对象层次结构的方式:

聊天服务器应该有一个聊天室列表

每个
聊天室
都应该有一个
聊天用户的列表

每个
ChatUser
都应该有一个或没有
ChatRoom
和一个出站套接字

(假设一个用户一次只在一个房间里。允许多个房间会让事情变得更复杂)

这就是房间选择的工作原理:

当客户端连接时,将创建一个
ChatUser
。服务器要做的第一件事是将聊天室列表发送给用户。然后,客户端用它想要加入的聊天室的名称进行响应。当该名称的聊天室不存在时,将创建该聊天室并将其添加到聊天室的全局列表中

然后将客户机添加到文件室,并在客户机上设置文件室

这就是聊天的工作原理:

当用户的套接字接收到聊天消息时,它应该在用户当前所在的聊天室中调用
SendToAllClients
方法(当聊天室为空时,它应该向用户返回一条错误消息,说明他们必须先加入聊天室)

然后,文件室的
SendToAll
方法应调用其用户列表中所有用户的
SendToClient

然后,类的
SendToClient
方法将聊天消息发送到客户端

如何为每个用户扩展多个聊天室

要允许客户端同时加入多个聊天室并在其中进行单独的对话,客户端必须能够:

  • 随时请求房间列表,而不仅仅是在启动时
  • 随时加入会议室,而不仅仅是在启动时
  • 离开房间
  • 发送邮件时指定房间
这意味着客户端想要执行的操作无法从其当前的状态推断出来。您需要将此信息添加到用户的消息中。例如,您可以将其作为前缀。像

!list
要求提供房间清单

!join:asdf
加入/创建房间asdf

_asdf:Hello
向房间asdf发送消息Hello


来自服务器的消息应该有类似的前缀,以便客户端可以推断消息是房间列表还是聊天室消息,以及消息来自哪个房间。

您应该尝试查看ASP.NET的SignalR(例如:jabbr.NET/)。这可能会更有用、更方便。

是的,炼金术球窝看起来不错。它也有聊天应用程序的样本,如果我想做多房间聊天呢?我需要更新什么?谢谢你!不要期望我们为您编写代码。如果你被困在某个地方,stackoverflow会帮助你。对不起,我不想从你那里得到代码。。4.我的英语不好,所以你写的时候可能看起来不太好。。但我只想知道如何解决这个问题,因为我不知道从哪里开始编程。。我搜索了关于他的问题的话题,但我没有找到任何好的解决方法。因此,如果你能从理论上帮助我,我将需要从多室聊天开始,我将非常感激。是的,这就是我需要的。非常感谢你,菲利普。关于客户,我的想法是,创建techer应用程序,lector在其中拥有自己的类。在班上大约有20人,lector将有一块板(HTML5画布)和当前班级的聊天。问题是,客户一次上两节课,做什么更好?我认为这没有道理。因此,他需要注销当前课程。因此,一个客户端一次只能访问一个课程。你们认为这是一个很好的解决方案吗?所以对我来说,聊天室是一个课堂,老师有一个黑板,它使用websocket与学生(客户)共享黑板,每节课都有可能聊天。你认为Alchemy Websockets服务器是我服务器端架构的良好基础吗?关于Alchemy:我不知道,我从未使用过它。链接已经失效。
!join:asdf
_asdf:Hello