UDP即时通讯三篇

2024-06-27

UDP即时通讯 篇1

UDP协议的全称是用户数据包协议, 在网络中它与TCP协议一样用于处理数据包, 是一种无连接的协议。

在IOCP模型下, 当一个套接字与一个完成端口关联后, 就可进行正常的网络通讯操作了。当前绝大部分的IOCP通讯应用都是基于TCP协议的, 很少有使用IOCP模型来设计UDP通讯, 本文将详述如何实现IOCP模型的高并发UDP通讯。

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言, 旨在设计成为一种“简单、现代、通用”, 以及面向对象的程序设计语言。

2 高并发通讯的实现

2.1 异步套接字与栈管理

在.NET Framework中, 与Socket通讯相关的IOCP对象被封装成了异步对象Socket Ass ync Event Args, 为确保通讯时不因等待该对象的空闲状态而挂起通讯, 这里将该对象加入到栈管理, 确保在通讯时有足够可用的异步对象, 定义如下:

Stack_Stack Args=new Stack () ;

通讯进行时和完成时分别通过锁定方式对栈中的异步对象执行取出和压入操作。

2.2 数据缓冲区管理

当异步对象的栈长度确定后, 结合预先定义的最大包长度, 即可确定缓冲区长度。如栈长度10, 最大包长度1024字节, 则缓冲区长度为10240字节。初始化缓冲区后, 可通过异步对象的Set Buffer函数, 设定其缓冲区域。

2.3 启动IOCP模式的UDP通讯

在C#编程中, 虽然提供了UDPClient通讯类, 但该类不能使用异步对象, 因此, 需使用Socket对象启动UDP通讯, 如:

Socket socket=new Socket (Address Family.Inter Network, Socket Type.Dgram, Protocol Type.Udp) ;

接收数据部分代码如下:

其中Process Received函数将接收到的数据进行初步处理后向应用程序弹出, 然后将arg对象压入栈管理, 供其他接收线程使用。

发送数据时, 从发送栈中提取一个可用的异步对象, 将待发送数据复制到异步对象对应的缓冲区中, 调用Socket的Send To Async函数进行数据发送, 部分代码如下:

其中Process Sent函数在处理完发送数据后, 将arg压入发送栈备用。

在实际的通讯应用中, 为提升通讯的响应速度, 通常将以上收发数据操作通过线程池来完成。关于工作线程的数量, 在MSDN文档上有相关解释, 当使用IOCP时, 推荐的工作线程的数量应不超过CPU核心数的2倍 (见MSDN Q192800相关文档) 。

3 测试结果

根据以上的介绍, 编写了一个测试程序, 该测试程序启动后, 会将接收到的数据原封不动的回发到发送方, 以此实现死循环收发数据, 从而测试当前系统的极限收发速度。

测试程序的服务器端和客户端均在同一台机器上运行。在测试过程中, 通过不断启动客户端并观察服务器端的收发速率增长情况, 当启动3个客户端后, 服务器端收发速率不再增长, 并维持在相对平稳的数值范围内波动。

测试数据见附表1, 其中在服务器平台测试结果如图1。

从测试数据可以看出, 测试结果与CPU性能直接相关, 服务器CPU的测试结果甚至达到了每秒分别收发2.8万个数据包。考虑客户端和服务器端同时运行的累加, 当服务器上仅运行服务器端时, 每秒收发包将有望达到5.5万次。这样的高频率收发数据, 在不使用IOCP, 仅使用UDPClient和线程的话, 是不大可能实现的。

通过以上的论述和测试, 我们可以确定, 在通讯中, IOCP不仅可以被应用于TCP协议, 而且也适用于UDP协议。基于IOCP模型, 完全可以使用C#开发出基于UDP通讯的高性能高并发的服务器端程序。

参考文献

即时通讯的沟通细节 篇2

首先与不同的同事们,你得区分并建立好一套确保沟通清晰无误的语言,尤其是那些很喜欢用图案表情来表达想法的90后同事。例如:

Henry:Peter,明天会议关于销售策略的方案撰写好没有?十分重要!

Peter:

这是代表努力中?放心?写得很强?还是想打人?抑或三更半夜的问候,可能他真的有点不知所措,所以就给你一个含糊的表情。其实你又不百分百肯定,追问下去又好像有点蠢。 否则,他一旦来一句,“老板,不是 也不明白吧!”

其次是留意用词,特别是现在比较流行的表情图案,对很多人来说,最初玩line (通讯软件) 或Wechat(微信)时,毕竟都只是用来跟女同事打情骂俏或与附近的陌生人搭讪,这时候表情图案的确暧昧浪漫(自我陶醉)。但现在很多公事上的沟通也开始通过这些渠道,而日常用的表情图案,因为不明确,放到工作上或许会引起理解错误而铸成大错。当然话说回来,有时对着一些不知道怎么回应,或者不想回答的问题,表情图案也可以帮个大忙。

而最重要的,或者和个人职场生涯最息息相关的,就是切忌在群组或朋友圈内跟同事说不在群或圈内的人的是非(尤其是你尊敬的老板)。虽然有时群组内的讨论十分热烈,你一言我一语,讲讲群/圈外人是非,八卦另一部门或团队同事,甚至是主管的糗事,实在是一大乐事。有时说得兴起,就会以老大身份露一手,讲句精警谚语,群组立即起哄 四起,你又再将平日受过的气忍不住多讲两句……这样当然爽,气氛亦更热烈融洽,但请谨记乔布斯教主在苹果手机上设置了一个你我常用、也特别好用的功能,叫Print Screen (截图),可以完全留下你的对话记录。笔者过去一段时间亦常常收到不少Print Screen的精彩对话内容,自己甚至是对话内容的主角。看过后,除了自己引以为鉴外,当然亦会很小心地过滤一下,如发件者与说话者的关系、整段对话的前因后果,是否会有特别剪裁之嫌等等。毕竟,发者肯定是有心人,接收者可不能大意。

科技大大便利了我们的工作,使用得当确实能增加不少便利,以上几点可能只是凤毛麟角的日常小案例。但作为普通大众,尤其是上有高管、老板,下有手下三千的我,魔鬼总在细节里,如掉以轻心,那便输了。

UDP即时通讯 篇3

随着世界通讯技术的快速发展,各种即时通信软件开始涌现,广泛的应用在各种环境下,极大的便利了人与人之间的沟通交流。企业对即时通信软件的需求伴随着电子商务应用和企业信息化建设的不断深入,也愈发强劲,于是,逐渐衍生了另一个分支——企业级即时通讯软件。

即时通信软件在企业领域的应用,也帮助企业降低了沟通成本。企业即时通讯软件的产生为的是解决个人即时通信软件面对企业用户时的欠缺。

在谈到企业对即时通讯工具的需求时,某行业资深人士表示:“在现代企业的内外部协作中,即时通信软件都是不可或缺的日常沟通工具,如果企业员工都使用个人即时通信软件,而此类即时通信软件多数以亲友为主要沟通对象,员工在工作过程中极易受到干扰,并且员工在即时通信过程中需要互相加为好友。当企业规模达到几十上百时,这个问题就会严重影响着企业即时沟通的效率。”

企业对个人即时通信软件的管理难度极大,并且员工离职后客户人脉也会流失。也正是因为意识到了个人即时通信软件的局限性,越来越多的企业都在寻求适合的企业即时通讯软件。

与个人即时通信软件相比,企业即时通讯软件能将企业的步伐协调的更加紧密。帐号可由企业管理员为员工统一申请,联系人列表按照企业的组织架构分层级显示,通过员工名片,企业内部员工在交流时,即使是初次接触也能立刻了解对方所属的部门、职位,加快沟通效率和事务处理速度。

企业级即时通讯软件,不仅向企业成员提供了视频对话、语音对话、文件传输等沟通方式,并且除了一对一的沟通,同时任何企业都可以发起讨论组、群模式的沟通,在群组中,成员可以上传共享文件。

大蚂蚁作为企业即时通讯不仅能便于公司更好管理企业资源,保证企业机密的安全和延续,同时,还提供企业个性化设置,例如Logo定制等,让企业拥有专属的企业即时通讯,在与合作伙伴、客户交流时,体现公司的团队形象,无形中也有助于公司品牌的整体推广和宣传。

BigAnt(大蚂蚁)国内首家电子政务即时通讯软件。专为企事业单位和政府部门设计,通过对政企机构内部现有信息和应用系统的一体化集成整合,快速实现企业内部即时通讯、局域网文件共享管理、分权限组织架构管理、一站式协同办公等功能,能够有效的缩短内部沟通距离,快速提高政企内部工作效率。

上一篇:多媒体英语课程优势下一篇:双电源回路