好的,我知道这很宽泛,但让我缩小一点。我已经完成了一些客户端 - 服务器编程,但是一次只能处理几个客户端。所以我在设计方面想知道这些服务器最主流的方法是什么。如果人们可以参考教程,书籍或电子书。 哈哈好的。并没有真正缩小它的范围。我想我要找的是服务器端程序如何设置的一个简单但实际的例子。 我看到它的方式:客户端发送命令:服务器接收命令并放入队列中,服务器有一个专用线程或一个不断轮询该队列的线程池,然后将适当的响应发送回客户端。是否经常使用非阻塞I/O? 我想只是教程,时间和练习是我真正需要的。什么是设计大型服务器程序最常用的方法?
*编辑:谢谢你的回应!这里有一点我想要做的,我想。 这主要是为了学习的目的,所以我宁愿尽量避免使用框架或库。举个例子,这有点弥补的想法: 有一个客户端程序,它执行一些功能,并不断将输出流传输到服务器(可以有很多这些客户端),服务器然后创建统计信息并存储大部分数据。并且假设有一个可以登录到服务器的管理客户端,并且如果有客户端正在将数据流式传输到服务器,则它会将该数据传输到每个连接的管理客户端。 这是我的设想服务器程序逻辑: 服务器将具有3个线程,用于管理传入连接(每个端口一个监听),则产生线程管理每个连接: 1)ClientConnection这将基本上只是接收输出,我们只能说是文本 2)AdminConnection这将是服务器和管理客户机之间发送命令 3)AdminDataConnection这将主要是用于客户端的输出流来管理客户端
当数据从客户端进来到服务器,服务器解析什么是相关的,并将这些数据放入队列中让我们说adminDataQueue。反过来,有一个线程监视这个队列,每隔200ms(或其他)检查队列,看看是否有数据,如果有的话,然后遍历AdminDataConnections并将其发送给每个队列。现在
的AdminConnection,这将是任何命令或数据的直接请求。因此,您可以请求统计数据,服务器端将接收统计数据的命令,然后发送一条说明传入统计数据的命令,然后立即发送统计数据或统计数据。
至于AdminDataConnection,它仅仅是从客户端的输出交织在一起,也许一些简单的命令。
从所有的客户端数据的逻辑问题的带宽问题除了被漏斗一起给每个管理员客户端。会从这样的设计出现什么样的问题,是由于缩放问题(再次忽略客户端和服务器之间的带宽;管理客户端和服务器
你能写出一个用户故事,以更好地缩小它。这听起来像你不是在谈论一个Web应用程序,而是你自己在写服务器的地方。 – 2009-09-28 17:41:57
就像电锯没有必要比钢锯更好?你是否知道数据的性质(更像是银行交易,你可能会丢失数据,或者更像是你不太在意的游戏交易),吞吐率,响应时间等。 也许,最好的细节是给我们你简短的具体用例。 – 2009-09-28 18:02:44
我可以把你指向我的书,但那将是一个完全无耻的插件。 – mtnygard 2009-09-28 22:07:40