有多台嵌入式Linux的数据采集器,通过3G模块拨号上网后,将采集的数据提交到服务器。数据采集器数量最多允许达到65535台(实际没那么多了。。),而且考虑到数据最好不出错,采用TCP协议传输数据而不是UDP;
数据采集器的数据提交周期大于4分钟。请教大家这种情况下采用方案1:服务器与每个数据采集器之间建立长连接,即每次传输完成后仍保持连接;
还是采用方案2:服务器与每个数据采集器之间建立短连接,即每次传输前建立连接,传输并确认完成后断开连接。个人倾向采用方案2,并且服务器建立一定大小的线程池以减少频繁创建销毁线程的损耗。
但还是没多少这方面的实际经验,希望有经验的朋友能够指点指点。

解决方案 »

  1.   

    这要看你这些采集器与服务端的连接频率了。如果每天都是往复循环,不停的重复数据传输,那如果用第二种方案的话,反复建立连接也是相当消耗的。
    一般采集数据都是接近与实时的,所以一般不要求数据没有任何错误,偶尔丢失是完全可以接收的,所以实时采集数据很少采用TCP,而更多使用UDP。
      

  2.   

    同意这个观点,确认在实际当中,这种情况,一般都是用UDP
      

  3.   


    采集器提交的数据有些是实时数据(大约每四分钟提交一次),但是有些是日常统计数据(每天才提交一次),如果采用UDP,不巧这个日常统计数据丢了怎么办?
      

  4.   


    考虑数据采集器可能会达到很多(比如几千或上万台),这样的话同时保持这么多长连接要开好多线程。。论坛查了有很多用IOCP的,请教熟悉IOCP的朋友,我这种情况是不是比较适合用IOCP?
      

  5.   

    不需要那么多线程的,建立连接后,把socket句柄保存好就行,也可以采用模型进行绑定,iocp在windows下很好用,但是其他操作系统不能用。
      

  6.   

    服务器端是用Windows的,数据采集器是Linux的。数据采集器端只需要保持一个连接。
    这样服务器端用IOCP,数据采集器端用普通tcp client是否可行?