当前位置: 技术问答>linux和unix
linux_c++_服务器开发
来源: 互联网 发布时间:2017-05-29
本文导语: 大家好,小弟不才想向各位大神讨教点问题。 我现在遇到了这样一个问题: 大概有600多个点(就是客户端)需要向server端(需要开发的程序)发送数据包(格式都是T(type)L(length)V(value)类型),每...
大家好,小弟不才想向各位大神讨教点问题。
我现在遇到了这样一个问题:
大概有600多个点(就是客户端)需要向server端(需要开发的程序)发送数据包(格式都是T(type)L(length)V(value)类型),每一个数据包都会带有0~5张的图片(每张300kb~500kb),都是长连接的,基本上1天下来会有200万左右的数据量,server端要把数据写入数据库并把图片保存到文件里。
服务器是linux系统,8核cpu,16G内存
我初步的想法是:用一批线程去负责接收这600多个客户端发送来的数据,存到缓存里,,再开一批线程去处理数据,用一种管理机制(大概就是从缓存里取出一个数据包给处理线程1,再取出一个包给处理线程2,依次循环...)。
但是我感觉问题好多。
1:按照8核的cpu开8个接收线程8个处理线程(管理机制也得启动一个线程去分发数据包,可能还要开其他的检测线程)合适不合适?
2:如何让8个接收线程去接收600多个客户端的数据呢,每个数据包都是很大的,采用什么模型?select模型能行吗?
3:关于接收的数据存到缓存里这部分我有点糊涂,用队列吗?
4:管理机制从队列里取出一个数据包,怎么实现把这个包投递给线程?还有就是,投递数据包给线程的时候线程必须得是在挂起的状态(线程上一次数据已经处理完了,现在处理空闲状态)才能去投递,怎么知道这个线程是不是正在处理数据?
5:如果数据太多,接收线程一直在接收,处理线程处理不过来怎么办?
...........
还有很多问题。
小弟是个IT新手,现在用C++在做一些小型的客户端和服务端程序,对服务器的设计这方面很是头疼,还希望有大神指点,谢谢了。。。
我现在遇到了这样一个问题:
大概有600多个点(就是客户端)需要向server端(需要开发的程序)发送数据包(格式都是T(type)L(length)V(value)类型),每一个数据包都会带有0~5张的图片(每张300kb~500kb),都是长连接的,基本上1天下来会有200万左右的数据量,server端要把数据写入数据库并把图片保存到文件里。
服务器是linux系统,8核cpu,16G内存
我初步的想法是:用一批线程去负责接收这600多个客户端发送来的数据,存到缓存里,,再开一批线程去处理数据,用一种管理机制(大概就是从缓存里取出一个数据包给处理线程1,再取出一个包给处理线程2,依次循环...)。
但是我感觉问题好多。
1:按照8核的cpu开8个接收线程8个处理线程(管理机制也得启动一个线程去分发数据包,可能还要开其他的检测线程)合适不合适?
2:如何让8个接收线程去接收600多个客户端的数据呢,每个数据包都是很大的,采用什么模型?select模型能行吗?
3:关于接收的数据存到缓存里这部分我有点糊涂,用队列吗?
4:管理机制从队列里取出一个数据包,怎么实现把这个包投递给线程?还有就是,投递数据包给线程的时候线程必须得是在挂起的状态(线程上一次数据已经处理完了,现在处理空闲状态)才能去投递,怎么知道这个线程是不是正在处理数据?
5:如果数据太多,接收线程一直在接收,处理线程处理不过来怎么办?
...........
还有很多问题。
小弟是个IT新手,现在用C++在做一些小型的客户端和服务端程序,对服务器的设计这方面很是头疼,还希望有大神指点,谢谢了。。。
|
你这种量级不是单机可以搞定的, 肯定要分布式存储,不管是kv还是文件系统。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。