我正在写一个客户端/服务器应用程序,真的找不到符合我需要的指南.做我自己的事情,在我甚至开始之前就会引起许多设计缺陷.例如,服务器应每秒更新一次客户端状态多次.我假设我无法单独更新每个客户端,但UDP广播应该解决这个问题.但是,我仍然需要一个TCP通道来与每个客户端可靠地通信,如:聊天消息,用户输入等.

研究这个话题似乎是一个服务器可以同时使用这两个协议 – 但只有可能(不是感性的).没有人提出这样的做法,实际上我从this article聚集起来,使用这两种方法都不好用.

现在我非常困惑我应该如何处理我的服务器中的数据.除非我完全误解了有关数据包丢失的信息,否则我想要保证用户输入的’server-request-packet’不会丢失.关于使用UDP保证交付的所有答案都说,使用TCP,而不会使用TCP.更令人沮丧的是,每个服务器/客户端程序,我可以想象,至少需要一些保证传递的消息(例如“断开”消息?).

我应该使用UDP,TCP,还是我只是想这个完全错了?

解决方法

让我们得到一些事实:

> UDP不可靠.永远.
在某些情况下,UDP可能特别有损;例如如果存在网络拥塞,速率限制或流量分析,或者如果UDP消息大小大于MTU.
> UDP广播仅适用于您的本地网段.互联网路由器通常不允许广播进一步传播.这真的限制了它的有用性.
> UDP组播可能是一种可能性,除了它也被阻止.

所以这可能让你有两个主要的可能性:

>从您的服务器到每个客户端的UDP点对点消息传递.
> TCP从服务器到每个客户端.

另一种可能性是使用UDP或TCP的某种对等网格通信,但是这变得非常复杂.不要去那里,除非你真的需要,真的知道你在做什么.

所以你的问题.

Should I use UDP,both or am I just thinking completely wrong about this?

我建议在服务器和每个客户端之间使用TCP,因为它是最简单的.为了进一步简化,每个客户端使用多个TCP连接,以避免复用多个“对话”单个套接字.

网络性能不是最佳的,但是它的应用可能会很好.而且我怀疑这是您想要花费所有开发人员时间的应用程序的一部分.

当您达到工作应用程序(客户端和服务器端)的位置,并且有人使用它时,您可能会发现(或不是)网络是主要的瓶颈和用户不满意的原因.然后,您将看到优化应用程序版本2.0中的通信.

当您实现版本2.0(或3.0 …)来解决可扩展性时,您将需要从依赖于单个服务器的方式移动.简单地说,如果你有N个客户端,N不断增加,那么在某个时候单个服务器将无法应付.应用程序设计中的其他东西也可能是有问题的.例如,在游戏应用程序中,您不能向所有其他玩家发送关于每个玩家的持续更新…玩家人数不断增长.但请注意,这些问题在很大程度上与您使用的网络协议无关.

java – 我的服务器是否同时使用TCP和UDP?的更多相关文章

  1. html5 http的轮询和Websocket原理

    这篇文章主要介绍了html5 http的轮询和Websocket原理的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 当iOS应用程序进入后台时,TCP和UDP(与多播)连接会发生什么

    我创建了几个实验:设置1:我创建了一个TCPSender应用程序和一个TCPReceiver应用程序.在本次实验中,我在iOS设备上启动了TCPSender,在另一台iOS设备上启动了TCPReceiver.然后两者都经过验证已建立连接并发送和接收数据.然后我将TCPReceiver应用程序置于后台.TCPSender应用程序指示连接丢失和崩溃(是的,我打算这样).设置2:我创建了一个UDPSen

  3. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

  4. ios – Swift:使用GCDAsyncUdpSocket接收UDP

    开始:接收:发送:编辑:添加了忘记的代码行.解决方法我终于得到它使用这个套接字设置:

  5. 在iOS中,如何增加主机的HTTP连接限制?

    使用Xcode网络工具,我分析说,我每次只能建立每个主机的4个TCP连接.似乎iOS的每个主机的默认TCP连接限制为4.我们如何增加这个限制?

  6. Swift开发:GCDAsyncSocket通信之TCP服务器

    overridefuncviewDidLoad(){super.viewDidLoad()clientSockets=NSMutableArray()msgTextView.backgroundColor=UIColor.grayColor()msgTextView.text="接收的客户端消息:\n"}//发送消息按钮@IBActionfuncsendBtnClick{ifclientSockets.count==0{return}letmsg=inputTextInput.text!//1.处理请求,

  7. Swift开发:GCDAsyncSocket通信之TCP 客户端

    varmainQueue=dispatch_get_main_queue()overridefuncviewDidLoad(){super.viewDidLoad()}//连接服务器按钮事件@IBActionfuncconBtnClick{do{clientSocket=GCDAsyncSocket()clientSocket.delegate=selfclientSocket.delegateQueue=dispatch_get_global_queue(0,0)tryclientSocket.conn

  8. Swift开发:GCDAsyncUdpSocket 通信之UDP广播

    ;//2主界面ui显示数据dispatch_async}funcudpSocket(sock:GCDAsyncUdpSocket!

  9. 如何将android客户端连接到我的笔记本电脑内的Apache服务器(php)的localhost?

    我的笔记本电脑中的localhost-127.0.0.1或android10.0.0.1中的localhost?>那么,如果我想从android访问localhost来调用PHP来运行?哪个ip地址/url我需要放在Android应用程序?我需要在httpconfig中为XAMPP修改任何内容吗?解决方法使用ipconfig在笔记本电脑中找到您的IP地址.在手机中使用该地址而不是127.0.0.1.

  10. android rest客户端不支持的媒体类型

    我尝试从android模拟器发送请求到一个安静的服务器.但我总是得到错误:415UnsupportedMediaType.客户代码:服务器的代码:解决方法问题是服务器不知道客户端请求的媒体类型.在客户端代码中尝试这样的事情:request.setHeader(“Content-Type”,“application/json”);

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部