网络编程服务器客户端1对多的问题,求高人 CS构架,一个服务器与200多个客户端通讯,客户端服务器间通讯数据不多,但必须保持实时通讯,不能断开如果解决?开200多个线程不实际吧哪位大虾有实例?拜求~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议学一下tcp/ip的思路……呵呵…… overlapped I/O or IOCP. 完成i/o建议LZ看下书,找点资料 如果数据量很少的话,可以考虑用WSAAsyncSelect,然后直接在消息处理中收发,这样最简单。IOCP的效率主要体现在大并发量的连接和数据收发上,你的情况是保持200连结小数据量,所以我认为用不着IOCP 要是所有的scoket都做同样的事情,写一个线程定义就可以来,只不过起200个同样的线程而已也可以用select判断,哪个socket有数据到达,就处理哪个,这样用一个或者几个就可以来 Win NT以上系统支持WSAAsyncSelect、WSAEventSelect、Overlapped IO、IOCP几种模式,但WSAEventSelect跟WSAAsyncSelect因为实现上依赖WSAWaitForMultipleEvents ,而WSAWaitForMultipleEvents 对于Event的数量有一个限制即不超过WSA_MAXIMUM_WAIT_EVENTS (64),所以如果使用WSAEventSelect跟WSAAsyncSelect,多于64个Client就必须相应增加线程来处理,但这两种模式相对实现简单,IOCP可以支持最大限度由可用socket句柄号数决定,但IOCP实现比较复杂。 补充下楼上:原始的select模型也有64个socket的限制,不过可以通过重定义来扩充,不知道WSAWaitForMultipleEvents 是不是也可以这样 主要问题在于我的服务器端是要主动去connect那200多个客户端而不是listen等待每个客户端来连接这样还能用完成端口实现吗?难道我真的要开200个线程去处理每一个连接? 主要问题在于我的服务器端是要主动去connect那200多个客户端?有个前提,服务端连接客户端,必须首先获得客户端的信息,通常都是listen等待客户端连接,之后,才能够获得连接客户端的必要条件。你的客户端和服务端之间的通信协议是如何定的?服务端connect多个客户端,也可以用IOCP实现,200个客户端肯定是没有问题。如果对200客户端的connect需要同时保持长连接(这个需求很少),并且需要相互独立的管理这200个连接,开销比较大。如果是短连接方式的话,设置一个链接池来管理。 回楼上的,我这边的情况比较特殊,通讯协议是TCP但情况是200个客户端处于listen等待accept,而服务器要依次去connect这些客户端,跟平常的CS系统1:N相反,我的是N:1 哦,你的通信模型是这样的。那还是用线程方式,分开处理每一个连接上的IO,把问题转换为如何管理200个线程了,在这里至于连接的稳定和重连,以及管理要高于IO上的问题 我还没从没写过这么多线程的是不是一定要写200个声明、定义和创建?这不是要费大量时间?-----------------------不用吧,线程函数只需要一个,因为你所有的线程都使用同一种模型和逻辑处理连接和IO创建线程,你循环200个Create,当然需要一个数组或者容器类来管理你这200个线程句柄以及ID,客户端套接字等等 你的服务器端需要connect客户端???这是服务器端么??Sever是用来Listen一个对client开放的端口,然后Accept客户端,接收客户端数据或主动下发数据,200个线程,你认为你的效率会如何? 单文档工程,怎么改变菜单的字体呢? 关于指向数组的指针? 又是installshield的问题!! 静态库的连接问题 各位大虾,怎么获取当前时段系统生成了什么文件啊? 关于读XML文件的简单问题。大侠帮帮小妹吧,结贴后送分100 XML文件中保存记录集,读出时如何知道各个字段得类型呢? 如何根据等灰度线来画三维图像? MSMQ错误:未能为检测点保存 MQInSeq。没有检测点,消息队列不能可靠地继续。 HELP!!!在线等待!!! 语音识别的搜索算法——怎样用C++实现。 CComboBox 如何与默认排序相反 求UPNP的例子和代码.
建议LZ看下书,找点资料
而不是listen等待每个客户端来连接
这样还能用完成端口实现吗?
难道我真的要开200个线程去处理每一个连接?
如果是短连接方式的话,设置一个链接池来管理。
但情况是200个客户端处于listen等待accept,而服务器要依次去connect这些客户端,跟平常的CS系统1:N相反,我的是N:1
是不是一定要写200个声明、定义和创建?这不是要费大量时间?
-----------------------
不用吧,线程函数只需要一个,因为你所有的线程都使用同一种模型和逻辑处理连接和IO创建线程,你循环200个Create,当然需要一个数组或者容器类来管理你这200个线程句柄以及ID,客户端套接字等等
这是服务器端么??Sever是用来Listen一个对client开放的端口,然后Accept客户端,接收客户端数据或主动下发数据,
200个线程,你认为你的效率会如何?