写一个简单的即时通讯软件需要掌握哪些基础的网络知识

2014-01-04 23:35:27 +08:00
 jxwho
求问,写一个简单的即时通讯软件需要掌握哪些基础的网络知识呢?
像socket的那些,可以方便list下么?
5498 次点击
所在节点    Python
15 条回复
zonyitoo
2014-01-04 23:45:08 +08:00
简单的即时通信软件就是P2P发数据吧,那要学习一下socket怎么用就好了
最好学一下TCP、UDP之类的协议,还有计算机网络相关的知识
因为P2P聊天有个NAT穿透的问题要解决
http://zh.wikipedia.org/zh-cn/NAT%E7%A9%BF%E9%80%8F
dimpurr
2014-01-04 23:45:44 +08:00
@jybox 精子不来解释一下零毫秒的技术么
Hector01
2014-01-04 23:58:03 +08:00
局域网下的话可能需要UDP广播来寻找通信的另一方;
发送消息可以加密,使用相关的算法加解密;
其他的楼上也说了
zzNucker
2014-01-05 00:04:15 +08:00
binux
2014-01-05 00:27:38 +08:00
@jybox 既然有人郑重其事地召唤,零毫秒这个名字看起来也很厉害,去看了下代码
首先,看起来并不是点对点的,嘛,这不是问题,反正你中意的QQ也不是

看起来是用的QT的接口做的通信,而不是自己写的
那么,请问QTcpSocket是拥塞的还是非拥塞的?
如果是拥塞的,你如何防止对方慢速攻击?
如果是非拥塞的,你如何防止爆缓冲?
missdeer
2014-01-05 00:32:47 +08:00
@binux 哪里的源代码
binux
2014-01-05 00:35:50 +08:00
zzNucker
2014-01-05 01:26:43 +08:00
@binux 不必这么苛刻了,题主都说是个简单的即时通讯软件。
而且别人是中学生 - -。 还是多鼓励下么。
RagnarokStack
2014-01-05 01:42:26 +08:00
关于NAT穿透可以看下STUN:

http://zh.wikipedia.org/wiki/STUN
jybox
2014-01-05 02:23:53 +08:00
@binux 那个是我差不多两年写的,当时对 C++ 的各种库了解也不多,看到 Qt 能一站式的解决就用 Qt 写了,Qt 的网络库并不是好的选择,这个很显然。

QTcpSocket 是阻塞还是非阻塞?这个问题有点无从回答啊,Qt 有特有的信号槽机制来处理「事件」,至于 QTcpSocket 内部应该是会建线程,同步 OI(没有用 epoll 之类的).

当时真没考虑这么多,后来一直计划着要重写,但是一直也没动手。
jybox
2014-01-05 02:25:13 +08:00
看错了,是拥塞,这个 QTcpSosket 肯定是没有的,只是很简单的一个 TCP 的封装。
binux
2014-01-05 02:30:26 +08:00
@jybox 为什么这么提就是因为,我看到你群发消息的时候是挨个send的,那么假如有一个用户很慢,那么就会拖慢所有的用户。
那么,这个零毫秒到底在描述哪方面的特性?
jybox
2014-01-05 03:33:04 +08:00
@binux 现在看来,确实没啥特点,也就是楼主所要的「简单的即时通讯」吧
missdeer
2014-01-05 10:40:49 +08:00
@jybox 之前简单翻过Qt的源代码,貌似它用的是select,不像libuv之类不同平台用了该平台最高效的模型
allenforrest
2014-01-05 15:02:11 +08:00
了解一下 XMPP 协议先

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/95685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX