编写自定义服务器时,确定在任何给定时间可以连接到服务器的最大用户数的最佳实践或技术是什么?

我认为计算机硬件,网络容量和服务器协议的功能都是重要的因素。

另外,您认为将网络连接数限制为特定最大用户数是一种好习惯吗? 或者服务器是否应该限制网络连接的数量,并且在响应时间非常高之前让性能降低?

===============>>#1 票数:8 已采纳

Dan Kegel汇总了从单个服务器处理大量网络连接的技术摘要, 网址为http//www.kegel.com/c10k.html

===============>>#2 票数:5

通常,现代服务器可以处理大量并发连接。 我曾经在有超过8,000个并发打开的TCP / IP套接字的系统上工作过。

您将需要一个高质量的服务界面来处理这种负载,检查libeventlibev

===============>>#3 票数:4

这是一个很好的问题,它肯定是情境性的。 你的电脑是什么? 你有一台装有四核Xeon,128 GB内存和光纤通道连接的4插槽机器(就像我们刚购买的那对戴尔R900)吗? 或者你在运行256 MB RAM和56K调制解调器的p3 550上运行? 每个连接在服务器上的负载量是多少? 什么样的反应是可以接受的?

这些是您需要回答的问题。 我想找到答案的最佳方法是通过负载测试。 创建代码将针对您的服务器执行的预期(可能是一些意外)路径的单元测试。 找到一个负载测试框架,允许您模拟同时执行这些任务的10,100,1000,10000个用户。

这将告诉您计算机可以支持多少个连接。

负载/单元测试场景的优点在于,您可以在单元测试中响应时间预期并增加负载,直到超出响应时间。 如果您需要支持具有Y秒响应的X个用户,您将能够通过负载测试来演示它。

===============>>#4 票数:0

高并发连接中最大的挫折之一实际上是涉及的路由器。 面向家庭用户的路由器通常具有小型NAT表,从而阻止路由器实际为服务器提供连接服务。

一定要研究您的路由器/网络基础设施设置。

===============>>#5 票数:0

我认为您不应该限制服务器允许的连接数 - 只需捕获并正确处理接受和关闭连接时可能发生的任何异常,您应该没问题。 您应该将这种较低级别的编程留给底层操作系统层 - 这样您就可以更轻松地移植服务器等。

===============>>#6 票数:0

这实际上取决于您的操作系统。

不同的Unix风格将支持“无限”数量的文件句柄/套接字,其他具有高值,如32768。

典型的用户限制是8192,但通常可以设置得更高。

我认为Windows更具限制性,但服务器版本可能有更高的限制。

  ask by Jon Ball translate from so

未解决问题?本站智能推荐:

1回复

网络上的连接计算机

我正在两台计算机之间的通信介质上工作。 它们都在同一网络上。 我知道每个设备的远程IP。 我正在尝试编写一个C程序,该程序在一台计算机上充当服务器,而在另一台计算机上充当客户端。 我试图从客户端使用端口311上的TCP协议建立此连接。 我想知道如何设置服务器? 我在服务器上绑
1回复

在子网/网络上定位计算机

情况如下:我有一个可以通过以太网通信的特殊设备。 它通过以太网电缆连接到我的计算机,问题是这些设备不时更改,并且它们具有不同的IP地址。 他们总是以192.168。开始 其余的可能会有所不同。 设备回答IMCP(ping)。 现在,我们有一个IP列表,我们对其进行ping操作以查找设备
1回复

检测尚未建立与无线网络的任何连接的无线计算机

我所知道的是,除非它们在网络中连接在一起,否则无法检测到任何无线计算机。 我想知道; 有什么可能的方式,我可以打开无线适配器,搜索周围的其他无线设备类型以及诸如MAC或计算机名称等某种ID,而无需创建或连接任何网络,例如Wireless Ad-像我们在蓝牙中一样的Hoc网络等? -如果可能
2回复

如何使用python连接同一网络上的两台计算机

这是服务器端程序 这是客户端程序 当我在同一台计算机上运行这两个程序时,它运行得很好。 但是当我在同一网络上的两台不同计算机上运行客户端和服务器程序时,该程序不起作用。 任何人都可以告诉我如何在同一网络上从一台计算机向另一台计算机发送消息。 这是我第一次进行网络编程
7回复

获取网络上可用的计算机的IP地址? -java

我正在创建一个文件共享应用程序,它将查找在同一网络上运行该应用程序的计算机。 所以我希望我的应用程序能够发现计算机及其IP地址。 使用Java可以实现此任务吗? 谢谢
3回复

在同一网络上访问计算机

在计算机A(我的计算机)上,我有一个Perl脚本访问计算机B上的文件目录,计算机B是同一网络上的计算机。 我的Perl脚本访问该计算机,因为我已将其链接到我的R:驱动器。 现在让我们说我想要计算机C(一台专为自动化设计的计算机)来运行这个脚本。 我无法将计算机B映射到驱动器,因为计算机
3回复

如何确定传入连接来自本地计算机

我有一个SocketServer接受传入的连接。 出于安全原因,我应该只允许本地连接(来自运行服务器的计算机的连接)。 如何确定传入连接是否来自其他计算机? 以下代码是否安全? 而fromThisMachine()方法是这样的: 谢谢,Mohsen
2回复

无法在C#中连接2台计算机

我正在尝试在两台计算机之间发送消息。 我已经能够建立连接,但是由于某些奇怪的原因,我无法获取流。 服务器代码 客户代码 我的服务器代码通过打印接受的客户端请求来确认客户端连接。 但是由于某种原因,我无法从流中获取数据。 快速帮助将不胜感激。 谢谢
1回复

等待网络连接

我正在尝试创建一个程序,以便从网络上的另一台计算机发送和接收字符串。 通过该程序只有一台唯一的计算机连接在一起。 除了第一个连接以外,大多数操作都已完成并且可以正常工作。 仅当两台计算机同时打开程序时才能建立第一个连接。 由于另一台计算机上的服务器不会运行,因此将拒绝连接。 这是代码:
6回复

有关计算机网络中端口号的问题

根据我的理解,端口号就像电话分机一样。 就像商务电话总机可以使用主电话号码并为每个员工分配一个分机号码(例如x100,x101等)一样,计算机也具有一个主地址和一组端口号来处理传入和传出的连接。 但是问题是: 在什么基础上分配端口号? 流程还是应用程序? 根据我对防火