多个聊天室-使用端口是唯一的方法吗?如果有数百个房间怎么办?

| 需要一些指导。 我正在编写一个聊天室浏览器应用程序,但是有一个细微的差别。 这些是协作聊天,其中一个人键入内容,而另一个人键入时可以看到另一人输入的“ 0”击键。 此外,聊天空间不是一行,而是一个文本区域空间,就像在此处输入问题的空间。 所有击键(包括制表符/空格/输入)都应该实时可见。而且一次只能输入一个人(我想锁定应该很简单) 我尚未编写多个聊天室应用程序。我已经编写了一个简单的客户端/服务器,两者都通过端口进行通信。 所以这是问题 1.)如何编写多个聊天室应用程序?它也是基于端口的吗? 2.)我猜可以通过ajax向其他人显示他们每次键入的击键。还有其他可用的机制吗? 注意:我将使用python框架(web2py),但我认为框架在这里并不重要。 欢迎任何建议,谢谢!     
已邀请:
Wikipedia上的Comet(编程)条目很好地概述了您可以在客户端上采用的各种方法(假设您的客户端是Web浏览器),这些方法建议了服务器的正确设计(假设服务器\是一个网络服务器)。 该页面上未提及但您几乎肯定要考虑的一件事是在客户端上缓冲输入。我认为考虑到每个用户的击键击中服务器的多用户应用程序的伸缩性不佳,这还为时过早。我会考虑让用户击键进入客户端缓冲区,并且仅在用户在500毫秒左右的时间内未键入任何内容时才将它们发送到服务器。 您绝对不想为此使用端口。这会将应用程序层信息放入传输层,并将应用程序级关注点(应用程序将要创建一个新的聊天室)推入传输级关注点(需要在应用层上打开一个新端口)防火墙)。 此外,端口只是数据包头中的一个16位字段。您可以在设计应用程序的消息时做同样的事情:在每个消息的开头放置一个房间ID和一个用户ID,然后让服务器将它们全部整理掉。 令我感到困扰的是,当客户端请求更新时,应该发送什么。天真的解决方案是为房间中的每个用户保留一个缓冲区,并在每个(其他)用户的缓冲区中维护一个索引,作为用户状态的一部分;这样,当用户A请求更新时,服务器可以发送自用户A的上次请求以来用户B,C和D键入的所有内容。这引起了关于内存使用和持久性的所有问题,这些问题没有明显的简单解决方案 我在这里讨论的问题的正确答案将取决于您的要求。确保对这些要求进行了详细定义。在构建此内容时,您不想发现自己在问诸如“我是否应该组合击键?”之类的问题。     
您可以尝试做类似IRC的操作,其中当前的“ room”从客户端发送到服务器的文本前(
/PRIVMSG #room-name Hello World
),以空格分隔。例如,您可以将
ROOMNAME Sample text
从浏览器发送到服务器。 使用AJAX将是最合理的选择。我从未使用过web2py,但是我想如果您愿意的话,可以使用JSON来解析浏览器和服务器之间的数据。     

要回复问题请先登录注册