最新 | 最热门 | 最高评价

+0  港股实时行情系统设计

Tag: 网络编程 | 高性能Web架构
ideawu 发于 2018年07月26日 16:24 | 点击: 469 | 展开摘要
做一下记录。

做了一个可靠传输层,优点是层次分明,缺点是当丢包时价格更新不及时。可以优化成只重传不排序,Aggregator 区分是否是最新包,不是最新包则不更新最新价。

对外提供推和拉接口,两种都有适用场景,不能只提供一种。Query Server 采用 HTTP 协议,Push Server 可以用 WebSocket 协议。

把图改成 stack 形式。

Related posts:
为什么iComet比nginx-push-stream-module更好?

查看全文: http://www.udpwork.com/item/16971.html

+0  基于 TCP UDP 协议的实时流媒体的实时性分析

Tag: 网络编程 | RTP | VoIP
ideawu 发于 2017年06月19日 20:31 | 点击: 925 | 展开摘要
直播,电话通话,视频聊天都是实时流媒体的范畴。无论使用 TCP 还是 UDP,都会有延时。有个过时的观点是 UDP 更实时,但我不认为是这样。

实时流媒体的延时主要有几个因素:发送方缓冲,接收方缓冲,网络延时。缓冲包括网络缓冲,录制缓和冲播放缓冲。假设发送方缓冲是 10ms,接收方缓冲都是 50ms,网络延时是 100ms,那么就有至少 160ms 的播放延时。接收方缓冲比发送方多,是为了解决所谓的 jitter,网络延时不均匀导致的播放断续。

如果使用 UDP,如果丢包

查看全文: http://www.udpwork.com/item/16311.html

+0  SIP INVITE 会话建立过程

Tag: 网络编程 | SIP | VoIP
ideawu 发于 2017年06月19日 19:05 | 点击: 701 | 展开摘要
运行于 UDP 之上的 SIP,因为 UDP 是不可靠传输的,所以 SIP 协议本身要自己实现可靠传输。对于如何可靠传输,SIP 的 RFC 文档没有要求实现独立的传输层,而是将可靠传输隐含于交互过程本身。如果像 TCP/IP 协议那样分层,特点是清晰。而将可靠传输隐含于交互,则可控程度更高,当然也更复杂。

所以,RFC 中创造了一些概念,如 Transaction 等等,对于有经验的程序员来说,这完全没必须,反而造成困扰。对于程序员,用几句简单的过程描述就可以解决。如下。

查看全文: http://www.udpwork.com/item/16309.html

+0  SIP tag 和 Call-ID 的区别

Tag: 网络编程 | SIP | VoIP
ideawu 发于 2017年06月16日 19:29 | 点击: 619 | 展开摘要
SIP 的一次通话,可以通过 From, To, Call-ID 三元组来区分。但是,为什么 From 和 To 不用固定的地址,而要在地址后面加上 tag=随机数 呢?

tag 的目的是为了解决自己给自己打电话的问题(Hairpinning)。如果你自己给自己打电话,那么你应该有两个 Session,但是,如果 From 和 To 是固定的,你就无法区别这两个 Session 哪个是 caller 哪个是 callee。发送 INVITE 时,caller 会在 From

查看全文: http://www.udpwork.com/item/16305.html

+0  SIP报文Via和Contact的区别

Tag: 网络编程 | SIP | VoIP
ideawu 发于 2017年06月16日 18:54 | 点击: 2829 | 展开摘要
Via 是网络层的信息,SIP 报文将通过网络层发往这两个地址。Contact 是业务上的地址。那么问题是,应该发往哪个?

正确的做法是,请求响应模式中的响应发往 Via。如果解析 DNS 之后能直连 Contact,那么之后的报文(无论是否是请求响应模式)发往 Contact。

请求如果经过多个代理,每个代理都增加自己的 Via,变成 Via 列表。最终节点回复响应时,带有全部 Via 列表,根据最后一个 Via 获知要发送的目的网络地址。每个代理转发响应时,把最后一个

查看全文: http://www.udpwork.com/item/16304.html

+0  KCP同 UDT/ENET的性能比较

Tag: 网络编程 | KCP | 网络
skywind 发于 2016年02月18日 23:02 | 点击: 1956 | 展开摘要
如果不丢包那么 KCP(https://github.com/skywind3000/kcp)和 TCP性能差不多,KCP不会有任何优势,但是网络会卡,造成卡的原因就是丢包和抖动,有同学在内网这样好的环境下没有用任何丢包模拟直接跑,跑出来的数据是差不多的,但是放到公网上,放到3G/4G网络情况下,差距就很明显了,公网在高峰期有平均接近10%的丢包,wifi/3g/4g下更糟糕,这正是造成各种网络卡顿的元凶。

感谢 asio-kcp 的作者 zhangyuan 对 KCP 与

查看全文: http://www.udpwork.com/item/15236.html

+0  循环冗余校验CRC简介

Tag: CRC | 网络编程
鸟窝 发于 2015年07月31日 21:28 | 点击: 573 | 展开摘要
循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据数据包或电脑文件等数据产生简短固定位数校验码的一种散列函數,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。此方是由W.

查看全文: http://www.udpwork.com/item/15231.html

+0  网络程序计时器通常用啥实现?

Tag: 编程技术 | 网络编程 | 网络
skywind 发于 2015年07月26日 23:28 | 点击: 887 | 展开摘要
通常来讲,就是利用 select 的空余时间,来进行时钟检查,不管是 select / poll / epoll/ kevent,以下统称 select,它有一个等待时间作为参数,即没有事件时,最多 wait 多少时间,我们把这个作为网络库的基准频率,比如 10MS,或者 20MS, 25MS, 50MS,都是常用的几个值。

就是说网络库调用 select 等待事件时如果没有事件,那么最长等待 10MS 就返回了,这时再处理完所有网络事件后,就可以来处理时钟数据了。事件处理

查看全文: http://www.udpwork.com/item/14440.html

+0  经典的 TCP socket 读取报文错误

Tag: C/C++语言编程 | 网络编程
ideawu 发于 2015年07月16日 16:41 | 点击: 1368 | 展开摘要
面试了很多做了多年网络编程的人, 从TCP socket中读取报文这项基本技能, 许多人都做不对. 经典的错误用法是:

char buf[1024]; // 1024或者更大
read(sock, buf, sizeof(buf));
if(parse(buf) == 1){
// 报文解析完毕
}else{
// 不是一个完整的报文, 丢弃
}

这是非常经典的错误! 没有任何文档或者手册表明, read()会读到*完整*的报文, 对于read()函数来说

查看全文: http://www.udpwork.com/item/14408.html

+0  TCP 连接状态

Tag: 网络编程
鸟窝 发于 2015年06月26日 09:36 | 点击: 604 | 展开摘要
网上有很多的分析TCP连接状态的介绍,比如参考文档中的介绍。 本文只列出了两个TCP状态迁移图(中文和英文的),以备将来需要的时候查询。

参考文档

http://www.cs.northwestern.edu/~kch670/eecs340/proj2-TCP_IP_State_Transition_Diagram.pdf

http://www-01.ibm.com/support/knowledgecenter/SSLTBW_1.13.0/com.ibm.zos.r1

查看全文: http://www.udpwork.com/item/14369.html

+0  Socket分片:基于Netty的Java实现

Tag: Netty | 网络编程
鸟窝 发于 2015年06月11日 10:54 | 点击: 923 | 展开摘要
最近Nginx发布了1.9.1版,其中一个新的特性就是支持socket的SO_REUSEPORT选项。这个socket的SO_REUSEPORT选项已经有许多现实世界的应用。对NGINX而言,它通过将连接均衡的分给多个进程以提升性能。SO_REUSEPORT已经在一些操作系统上实现了支持。这个选项允许多个socket监听同一个IP地址+端口。内核负载均衡这些进来的sockets连接,将这些socket有效的分片。
尽管Java很早就有一个特性请求:JDK-6432031,但是

查看全文: http://www.udpwork.com/item/14376.html

+0  简单的 C++ 网络服务框架 Sim 介绍

Tag: C/C++语言编程 | 网络编程
ideawu 发于 2015年05月18日 17:22 | 点击: 1262 | 展开摘要
可测性

Sim 采用了一种极简的报文格式, 在你没有开始写 Client 时, 你就可以利用手上现成的工具, 如 nc, telnet 来测试. 可测性非常重要, 你可以随时查看代码的执行效果, 这对开发者的心理会产生非常正面的促进作用. 即使你不想使用 nc 这样的命令, 你想写 PHP 或者 Python 脚本, 也是非常简单的.

例如, 你采用 Sim 框架写了一个计算加法的服务器. 这时怎么测试呢? 很简单! 在命令行执行

$ nc 127.0.0.1 8800

查看全文: http://www.udpwork.com/item/14218.html
|<<<1234>>>| 一共4页, 40条记录