当前位置:  技术问答>linux和unix

关于网络通信的疑问

    来源: 互联网  发布时间:2017-04-10

    本文导语:  大家好 我现在正在做一个网络通信的服务端. 客户端发送数据到服务端,服务端通过不同的数据来甄别所需要做的处理数据库的操作,返回处理后的数据库的数据 现在本人很头疼的是: 1 处理接受到的数据,要创建一...

大家好

我现在正在做一个网络通信的服务端.

客户端发送数据到服务端,服务端通过不同的数据来甄别所需要做的处理数据库的操作,返回处理后的数据库的数据

现在本人很头疼的是:

1 处理接受到的数据,要创建一个线程来做任务的分流吗?

2 还有关于返回数据占用的内存,这个有什么好的建议吗?可能会频繁的开辟,用内存池.....

能说下,大概要用到什么样的技术吗,或者给个链接,此类的也好.

先谢谢大家了

|
按你说的,我理解是客户端发送类似增删改查的语句到服务器端,服务器端执行操作后将结果返回给客户端;

可以来一个客户端数据,启一个线程,返回数据时使用内存池,加上同步机制。但如果客户端很多、来的很快,线程启的太多会导致各种效率、同步等问题,这种方式就不太好了;

这种情况下可以使用生产者消费者模型,一个生产者:通过epoll将客户端的数据放到内存池中(这里把处理数据看成是一个任务,把任务放入任务队列中,当然得使用同步机制,多线程);多个消费者:启动n个线程,n个线程完成任务队列里的所有任务(一个线程完成一个任务后继续处理下一个任务,直到任务队列为空,这个又可以使用线程池了。。);返回数据这里有点麻烦了,要是数据量不大,直接栈上的内存就可以搞定,要大,那再用一个内存池。。。

呃,说多了,也不知道理解对不。。。。

|
ulimit -s可以看到堆栈大小,一般栈上存一些简单的数字,小型字符串数组等吧;查询返回的数据量有可能比较大;

按你说的场景,也只能想到你那种方法了:
epoll处理描述符,多线程接收语句、执行、发送结果;
这里好像也就只有查询麻烦一些,需要返回查询结果的数据量较大,这根据情况可以使用内存池,也可以考虑静态内存,同步机制是难免的;

|
1、你这里涉及到IO的操作,比较耗时,如果不开辟线程去处理的话,后续的业务会阻塞。建议采用线程池,recv完数据后,从线程池中获取空闲线程处理业务。

2、频繁地开辟,释放内存,建议使用内存池,一次开辟,多次使用,并且防止内存碎片。

|
用现成的select或者epoll来处理网络连接的问题。。
            关于返回的数据的内存你知道频繁使用那当然是内存池好啊,然后怎么联系起来、你可以用epoll的事件回调来实现、或者通过select吧数据写入到一个队列中去、然后多线程去读这个队列进行操作异步通信

|
1 处理接受到的数据,要创建一个线程来做任务的分流吗?
一般高并发的情况用线程池+epoll,看你的客户端并发程度高不高了;

2 还有关于返回数据占用的内存,这个有什么好的建议吗?可能会频繁的开辟,用内存池.....
这个最好使用内存池,可以提高分配和释放的效率,减少内存碎片,减少频繁malloc而提高效率,而且在释放的时候不用像链表那样循环遍历、判断、释放,直接free申请那块内存就行了;

|
1,做基于coroutine的插件架构。
2,做half-sync-half-async。
3,做leader-follower。

任何一种都可以解决你的问题,参考EPOLLONESHOT。

|
至于楼上扯的那些内存池等等,楼主不需要担心,使用tmalloc直接hook掉标准库的malloc/free即可,不需要自己实现,你只需要关注设计上的合理性。

    
 
 

您可能感兴趣的文章:

  • 网络通信编程的困惑
  • 开源网络通信加密协议 Tcpcrypt
  • Linux下的网络通信架构 cwinux
  • 请教网络通信高手~~~~
  • Web服务器/前端 iis7站长之家
  • 【不看后悔】UNIX网络通信一大疑难问题
  • linux和WINDOWS程序之间的网络通信是不是特别慢?
  • linux网络通信的问题
  • Linux网络编程(怎样实现两个客户端之间的通信)
  • linux下网络通信使用接受函数recv()问题?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • 网络通信SIGPIPE信号问题
  • 高分求助:内核模块编程中如何实现网络通信
  • 关于网络编程客户端与服务器通信的问题
  • 嵌入式 linux开发中,加入网络通信代码后,ARM9启动后在超级终端打印出错误信息,请帮忙解决!谢谢
  • 关于网络通信中recvfrom和sendto的用法
  • 我要做一个网络通信的程序,会涉及到从几个连接接收数据,然后整合
  • Socket通信中怎样探测对方网络已经出错?
  • linux下socket网络通信 得不到客户端IP地址
  • 基于java TCP网络通信的实例详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • android 网络编程之网络通信几种方式实例分享
  • Android之网络通信案例分析
  • 请求大家帮助,询问一个linux下本机调试一个简单网络通信的问题!!
  • 如何建立网络通信线程?
  • 基于Java回顾之网络通信的应用分析
  • 关于:UNIX网络编程第二卷 进程间通信问题!
  • 谁能给个 linux 下的 socket网络通信程序例子(C语言的)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,