QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 871|回复: 4

有即时通讯软件开发经验的朋友进来看看阿

[复制链接]
发表于 2004-8-5 22:35:53 | 显示全部楼层 |阅读模式
我准备在linux下做一个即时通讯软件,不过限于个人能力有限,对即时通讯软件内部的机制和其在网络上的运作机制还不甚了解。以下提出几个问题和我个人的一点愚见,还请各位高手帮忙指正解决:

1. 基本架构:我考虑过两种c/s和p2p,不过我仔细想了一下,如果是纯cs的话,每条信息都要通过服务器,用户多了服务期的负担就太重了,所以我觉得应该是两者的结合。即客户端与服务器之间是cs结构:客户端通过登陆服务器,注册用户,获得好友列表,获得在线好友列表,而服务器反馈给客户端相应信息。而客户端之间则是p2p的,通过向服务器获得好友的信息,从而获得好友的ip,客户端就可以相互通信了,也可以进行文件传输。

2.传输机制:我觉得tcp和udp都要用到。tcp:客户端与服务器之间的信息传送是利用tcp。udp:通过服务器获得好友的ip和port,就可以通过udp来传送信息。

以上是一些总体的构想,不知是否合理,请大家不吝给出宝贵意见阿:)而下面怎是一些具体实现中的问题,这是我做的过程中遇到的,由于第一次接触linux的网络编程,这些问题可能比较幼稚.

1.最令我头疼的:信息的处理。目前为止,我只利用socket传送过字节流和字符串,而大家知道,客户端与服务器之间及客户端之间是个交互的过程—〉客户端的信息可能是请求登陆,可能是请求获得好友列表,可能是传送信息。。。怎样来区分这些信息,是不是都把它们转换成字符串,传送过去再进行字符解析??
如果是这样的话就会出现另一个问题,由于你一个完整的请求的大小可能超过你的bufsize(很长的信息或很长的好友列表),分几次传会不会丢失信息,特别是用udp。不知道socket通讯机制能不能一次传一个结(send/sendmsg?),如果可以的话就可以在结构开头加一些相应的标志位,这样就方便多了,还可免去头疼的字符串解析。这方面究竟开怎么处理,请大家给各建议。

2.服务器端的问题

服务器端要能并发处理多个用户,有三种方法可以用,select或poll调用,即多路复用。还可以通过fock多进程,还有就是用多线程(还不会),究竟哪种比较合适 ,还是有其他方法?

可能还有其他问题,等我想到了再向大家请教。大虾们请多多指点阿,我这个咚咚还有一个半月就要交给老师了。
发表于 2004-8-6 02:24:56 | 显示全部楼层
关于信息处理方面,我觉得应该定义规范的消息格式,所有的消息统一成一种格式,处理起来比较方便,一般消息结构是由消息头和消息体构成,消息头相当于消息的控制块,消息体则根据消息头存放相应的内容。
网络上传输的数据用字符串比较好,因为你不能保证网络主机字节序是一致的,发送前和接收后对需要转换的内容进行转换处理。
回复

使用道具 举报

发表于 2004-8-6 13:51:05 | 显示全部楼层
赞成楼上的!
我觉得服务端fock比较简单(越简单越可靠嘛),还有就是客户端的数据最好不要经过服务端(因为人多了就会很慢)!
回复

使用道具 举报

发表于 2004-8-6 15:40:04 | 显示全部楼层
服务器的绝色只是……红娘、拉皮条的、介绍人……理解成这些都可以……
回复

使用道具 举报

发表于 2004-8-7 15:51:49 | 显示全部楼层
公社好像有这方面的项目,找找看,减少重复劳动。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:17 , Processed in 0.040691 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表