BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #41671同步于 2011/12/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

有个问题想请教会编写socket服务器的大牛!

armosee
2011/12/20镜像同步14 回复
本人想实现一个网络服务器,该服务器实现三个功能: 1.一直监听某一个网络端口,当有网络包来临时,就收下该包。网络包为UDP包,而且可能有多个agent向该服务器发包。 2.当收到网络包后,需要对网络包进行处理,将网络包按照一定的数据结构存储在内存中。 3.该服务器需要每隔一定的时间来对存储在内存中的数据结构进行计算,得出计算结果,然后输出。计算结束后,删除存储在内存中的过时数据。以便下一次计算的正确性。 需要注意的是第三个功能可能花的时间会很长。 其实这算是一个小程序吧,但本人还是感觉在这个程序框架的设计上 有点hold不住。。有几个点比较纠结。 1.如果采用单进程单线程的话,由于计算功能占用时间较长,可能会影响网络包的获取,造成丢包现象。同时,由于可能recv()会block,导致计算功能不能执行。 2.由于计算功能与前两个功能有共享内存,因此不能用多进程,考虑用多线程。但即使用多进程,第一点中的第一个问题仍然没有解决方案。 不知各位大牛对我的考虑有啥想法,有啥好的设计没? 跪谢啊 。。 我是来学习的
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
kicoven机器人#1 · 2011/12/20
【 在 armosee 的大作中提到: 】 : : 本人想实现一个网络服务器,该服务器实现三个功能: : 1.一直监听某一个网络端口,当有网络包来临时,就收下该包。网络包为UDP包,而且可能有多个agent向该服务器发包。 : ................... 把收数据包 和数据包处理 分开 ,一个线程专门收数据包 吧收到的packet直接放到一个队列里面缓存, 另一个线程从该队列中取报文 处理 存在内存中,计算。 共享内存就也能用多线程
purevirtual机器人#2 · 2011/12/20
多线程+aio 【 在 armosee (armosee) 的大作中提到: 】 : 本人想实现一个网络服务器,该服务器实现三个功能: : 1.一直监听某一个网络端口,当有网络包来临时,就收下该包。网络包为UDP包,而且可能有多个agent向该服务器发包。 : 2.当收到网络包后,需要对网络包进行处理,将网络包按照一定的数据结构存储在内存中。 : ...................
sagi机器人#3 · 2011/12/20
man epoll_create
froglian机器人#4 · 2011/12/20
最近同在做有些类似的东西,同学习
W27机器人#5 · 2011/12/20
单进程的话可以用select和poll
armosee机器人#6 · 2011/12/21
【 在 W27 的大作中提到: 】 : 单进程的话可以用select和poll : -- 感觉单进程单线程有点hold不住,因为计算功能可能耗时很大 势必会影响收包和处理包的功能 不知道这么理解对不对
purevirtual机器人#7 · 2011/12/21
林师兄 我才发现是你 【 在 armosee (armosee) 的大作中提到: 】 : 感觉单进程单线程有点hold不住,因为计算功能可能耗时很大 势必会影响收包和处理包的功能 不知道这么理解对不对
armosee机器人#8 · 2011/12/21
【 在 kicoven 的大作中提到: 】 : : 【 在 armosee 的大作中提到: 】 : : : ................... 恩 这个方案挺好的 我在想是不是需要三个线程,一个线程收包,一个线程处理包,一个线程计算。 因为计算功能和处理包功能并不是同步的, 计算功能是固定时间执行一次,处理包是只要缓冲队列中有便执行。
armosee机器人#9 · 2011/12/22
【 在 purevirtual 的大作中提到: 】 : 林师兄 我才发现是你 : 【 在 armosee (armosee) 的大作中提到: 】 : : 感觉单进程单线程有点hold不住,因为计算功能可能耗时很大 势必会影响收包和处理包的功能 不知道这么理解对不对 : ................... 哈哈 实习来苦逼了 过来帮我写程序吧