我这篇文章说一个Socket的小技巧,另外咨询一个问题

这些天重点攻打Socket
以前总觉得Socket编程应该比较容易,也做过简单的Socket程序。
但真正要应用时,发现有很大问题!

我用C#语言

我这个程序用到的Socket也不算多。大概50个Socket客户端连接到internet上不同服务器上,用的是TCP协议。数据传输内容是一些琐碎的包,总共用到网络带宽大概512bps。

问题产生在数据延迟上了,程序对数据包的延迟要求很高,要求延迟平稳不跳动。程序每发送一个请求后,到从服务器接受到的反馈数据时间差要求基本一致。此外,程序还不停接受从服务器发送来的一些信息。

当开启几个Socket的时候,效果非常好,实时性很高,延迟稳定
但开到40个Socket的时候(每个socket连接不同服务器),就完全不一样了。发送请求后,接收到服务器响应的数据包的时间差距很大。从100ms~10000ms不等。这对于我的程序完全是个灾难!!!

在查询很多资料后,终于知道微软有个nagle算法。为了有效利用带宽,nagle算法会使得Socket发送短数据包尽量合并发送,就产生一个延迟。

使用socket.SetSocketOption(SocketOptionLevel.TCP,SocketOptionName.NoDelay,1)可以关闭nagle算法。这样发出的数据包就立刻出发了!~~ :)

程序性能终于有所改善,但还是有问题
数据包延迟从原来的100ms~10000ms变为100ms~2000ms了。这个延迟对我仍然是灾难。而ping的时间是比较稳定的40~60ms

这个就是我要向大家咨询的问题了

我也做了个测试,几台电脑通过一个电脑共享Internet连接,然后在这几台电脑上分别运行我的程序。发现延迟与所有电脑总连接数没有关系,只与当前电脑上连接数量有关。当前电脑连接越多,延迟越不稳定!!~~~如果当前电脑只有一个连接,其他电脑不管开多少连接都不会影响到这台电脑上程序的稳定!!~~~

这是什么原因呢?应该如何解决呢?
谢谢大家

转载于:https://www.cnblogs.com/foreverpk/archive/2006/05/07/393129.html

Socket连接的小知识,和一个疑难杂症相关推荐

  1. iOS端Socket连接、发送数据(一)

    一.Socket的应用 IM即时通讯是通过Socket的方式实现长连接,可运用于 (1)直播聊天室.礼物 (2)微信.QQ等即时聊天 (3)游戏对话.技能等 二.SOCKET原理 套接字(socket ...

  2. 聊聊前端的冷门小知识 - 李游Leo公开课(2020-4-8 和 2020-4-10) 笔记

    冷门小知识 01 div 的伪类 后面用一个 : 和用两个:: 效果相同. <style type="text/css">div{width: 100px;height ...

  3. linux怎么连接两个服务器,一个服务器端同时创建两个socket连接 linux

    不可不知 Linux操作系统网络服务器模型 Linux系统网络服务器模型主要有两种:并发服务器和循环服务器. 所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻 ...

  4. 向一个无法连接的网络尝试了一个套接字操作_python3从零学习-5.8.1、socket—底层网络接口...

    源代码: Lib/socket.py 这个模块提供了访问BSD*套接字*的接口.在所有现代Unix系统.Windows.macOS和其他一些平台上可用. 这个Python接口是用Python的面向对象 ...

  5. 编译过程的一些小知识——内部连接与外部连接

    编译过程的一些小知识--内部连接与外部连接 这篇文章是我从我一个高中同学那里抄来的,感觉不错,转载一下! 首先,我们来了解下定义: 内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时 ...

  6. php linux fork进程 多个进程/线程共享一个 socket连接 出现多个进程响应串联

    简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复现示例代码: testFork.php <?php requi ...

  7. 安卓期末作品小项目_每日一个财务小知识——洞悉洞晰财务报告第一季

    财务报告 洞悉洞晰财务报告 目录 01/账务报告概述 02/资产负债表 03/利润表 04/现金流量表 05/所有者权益变动表 06/附注 一.财务报告概述 (一)财务报告及其目标 财务报告是指企业对 ...

  8. IOS绘制小黄人,对绘图知识的一个练习

    IOS绘制小黄人,对绘图知识的一个练习 #define kTopX rect.size.width * 0.5 #define kTopRadius 80 #define kTopY 260// // ...

  9. 英文登录QQ账号 一个有趣的小知识

    今天刷视频看到的一个小知识 用英文账号登录去登录QQ 首先需要把 你的QQ账号转换为16 进制的数,因为16进制的数里面是有英文字母的 abcde 进制转换可以用windows10自带的计算器去计算 ...

最新文章

  1. 数据库索引-基本知识
  2. linux下的sort、uniq、join的使用
  3. java回顾之继承 二
  4. 其他软件烘培的光影贴图在unity中如何使用
  5. Error querying database.Cause:java.sql.SQLSyntaxErrorException:ORA-00911:invalid character
  6. linux mysql定时备份并压缩
  7. 公共方法-利用for else搜索字典列表-for else
  8. Mark task complete in checkbox S2 Resource not found for the segment Tasks
  9. 购物中心潮--我的创业之路
  10. Leetcode--84. 柱状图中最大的矩形
  11. C++学习之路 | PTA乙级—— 1073 多选题常见计分法 (20 分)(精简)
  12. qt绘图事件(画刷的填充)
  13. 树算法系列之三:GBDT
  14. 用spss进行数据的标准化处理_用spss怎样对数据进行标准化
  15. 【爬虫】网页抓包工具--Fiddler--Request和Response
  16. Go语言学习笔记(三)---指针,运算符及流程控制
  17. python在excel中指定位置写入值
  18. 东大《工厂供电及节能技术Ⅰ》在线平时作业1
  19. 微信小程序openid如何获得IP白名单的方法
  20. 动态canvas 相册简单效果展示

热门文章

  1. 计算机课件制作技能,经济论文写作PPT制作有哪些技巧?
  2. sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
  3. android 等待按钮框架,Android 开发 MaterialDialog框架的详解
  4. utxo模型_什么是UTXO?简析账户/余额模型和UTXO模型
  5. 从概率论到Markov Chain Monte Carlo(MCMC)-- 转
  6. [BZOJ 2243] 染色
  7. 2019-11-18 自动控制原理的几个基本概念
  8. Codeforces Round #208 (Div. 2)D. Dima and Hares
  9. 带标签的循环语句、switch
  10. 渲染树构建、布局及绘制