怎样才能设计一个产品化的,强壮和高效率的Socket服务器程序,求教资深程序员

yinyu 2000-06-14 12:01:00
感谢您关注这个问题
Socket程序按照资料,依样画葫芦,大家都能写出来。
可是怎样才能保证Socket服务器容错性强,重负荷、网络性能不佳的条件下仍能有条不紊的处理信息,有关资料很少,希望有经验的程序员能谈谈您的体会。
恳请不要泛泛而谈,你们都知道程序员最想知道什么对吗

拜谢
...全文
414 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
NEOS 2001-07-13
  • 打赏
  • 举报
回复
/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
#ifndef FD_SETSIZE
#define FD_SETSIZE 64
#endif /* FD_SETSIZE */

typedef struct fd_set {
u_int fd_count; /* how many are SET? */
SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
} fd_set;

#define FD_SETSIZE 64
就是限制,但确切的数目可能与64不一样

这是msdn中的一篇文章

Maximum number of sockets supported

The maximum number of sockets supported by a particular Windows Sockets service provider is implementation specific. An application should make no assumptions about the availability of a certain number of sockets. For more information on this topic see WSAStartup.

The maximum number of sockets that an application can actually use is independent of the number of sockets supported by a particular implementation. The maximum number of sockets that a Windows Sockets application can use is determined at compile time by the manifest constant FD_SETSIZE. This value is used in constructing the fd_set structures used in select. The default value in WINSOCK2.H is 64. If an application is designed to be capable of working with more than 64 sockets, the implementor should define the manifest FD_SETSIZE in every source file before including WINSOCK2.H. One way of doing this may be to include the definition within the compiler options in the makefile. For example, you could add "-DFD_SETSIZE=128" as an option to the compiler command line for Microsoft C. It must be emphasized that defining FD_SETSIZE as a particular value has no effect on the actual number of sockets provided by a Windows Sockets service provider.



oldnew 2001-07-13
  • 打赏
  • 举报
回复
windows下没有限制连接的数目吧,只是限制了一下同时Accept的socket,也就是Listen()的一个参数,缺省是5,

一个socket要耗掉一定的内存,我写过的一个垃圾程序到200个的时候就顶不住了,早泄!

据说同等条件下C++写的比Java写的能 容纳的数目是不一样的...

你问哪个多?废话,当然是C++的多了。
meifen 2001-07-13
  • 打赏
  • 举报
回复
4
shaw 2000-10-31
  • 打赏
  • 举报
回复
还有,windows下是否限制socket连接的数目?如果是,有多大?如何改变?
kylewu 2000-10-28
  • 打赏
  • 举报
回复
你的意思应该是想服务器和客户端采用persistent connection的方式连接吧。
这样的话,服务器和客户端建立一个具有确认/重发协议的通讯规程就行了。
不过其实大多数的系统都是遇到出错就断开连接的,很多商业数据库系统也是如此,但也不见得很影响效率。
sxbyl 2000-10-28
  • 打赏
  • 举报
回复
关注!
softarts 2000-10-28
  • 打赏
  • 举报
回复
在windows下,采用线程池(completion port)系统会自动调整和激活线程
unix下,象apache那样,保持一定数量的进程监听,并且能够根据访问量提高降低监听的
进程个数
scklotz 2000-10-28
  • 打赏
  • 举报
回复
关注
LiXin 2000-10-28
  • 打赏
  • 举报
回复
attention
shaw 2000-10-28
  • 打赏
  • 举报
回复
listen
dirotac 2000-10-27
  • 打赏
  • 举报
回复
harley 2000-06-17
  • 打赏
  • 举报
回复
我不知道你的平台是什么呀?windows 和unix 在处理这些时的原理是不
同的.你可不可以告诉我你的平台.
茂奇软件 2000-06-16
  • 打赏
  • 举报
回复
listen!
pipu 2000-06-16
  • 打赏
  • 举报
回复
我怎经写过一个socket server就目前看来在500用户同时使用应该没问题。
就是运行在一台sun sparc机器。
有兴趣可以交流。
yinyu 2000-06-16
  • 打赏
  • 举报
回复
pipu,谢谢你的热心
前几天我就把你的e-mail放到我的通讯录里,准备向你请教关于COM的问题,没想到你热情的伸出了手。
我的主要问题是,作为服务器端,一旦与客户端建立了连接,那么它应该具有这样的能力:客户端由于程序编制错误、网络环境不佳,甚至恶意的破坏,可能会发出一些杂乱的无意义数据,如果服务器收到自己无法解释的数据就断开连接,那么客户端不得不重新建立连接,这个开销是很大的。
我现在的做法是,如果数据流长度与数据头中说明不一致,仍然将其全部收回来(姑且称为数据清理)然后继续监听客户端下一次服务请求,这样做有几个不自然之处(也许是我实现不当)
1。清理中用select函数询问端口是否还有数据,这个过程需要几十毫秒的延迟
2。这个过程中假定客户端会等待服务器端清理完毕后才会发送下一次服务请求,如果服务器还为清理完毕,客户端又发送请求,服务器端就会将其作为垃圾数据清理掉。而在重负荷应用环境下,这样会影响性能。

望指点
claywang 2000-06-16
  • 打赏
  • 举报
回复
我也编过Winsocket的程序,深有同感,
编出来不难,但编一个结构精良的就不
是那么简单的了。
dolaime 2000-06-15
  • 打赏
  • 举报
回复
pay attention
jy90 2000-06-14
  • 打赏
  • 举报
回复
listen!
jy90 2000-06-14
  • 打赏
  • 举报
回复
LISTEN!
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧