V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jxwho
V2EX  ›  Python

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

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

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

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

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

    当时真没考虑这么多,后来一直计划着要重写,但是一直也没动手。
    jybox
        11
    jybox  
       2014-01-05 02:25:13 +08:00
    看错了,是拥塞,这个 QTcpSosket 肯定是没有的,只是很简单的一个 TCP 的封装。
    binux
        12
    binux  
       2014-01-05 02:30:26 +08:00
    @jybox 为什么这么提就是因为,我看到你群发消息的时候是挨个send的,那么假如有一个用户很慢,那么就会拖慢所有的用户。
    那么,这个零毫秒到底在描述哪方面的特性?
    jybox
        13
    jybox  
       2014-01-05 03:33:04 +08:00
    @binux 现在看来,确实没啥特点,也就是楼主所要的「简单的即时通讯」吧
    missdeer
        14
    missdeer  
       2014-01-05 10:40:49 +08:00
    @jybox 之前简单翻过Qt的源代码,貌似它用的是select,不像libuv之类不同平台用了该平台最高效的模型
    allenforrest
        15
    allenforrest  
       2014-01-05 15:02:11 +08:00
    了解一下 XMPP 协议先
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:20 · PVG 04:20 · LAX 12:20 · JFK 15:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.