博客
关于我
socket长连接所用到的八大技术
阅读量:472 次
发布时间:2019-03-06

本文共 819 字,大约阅读时间需要 2 分钟。

我最近完成了一个耗时7天的项目,解决了一个复杂的异步socket通信问题。由于公司机密原因无法展示完整代码,不过在之前的技术博客中,我详细介绍了socket通信的基础知识。

在这次项目中,我总结了8种核心技术,希望能为大家提供参考:

1. 多线程处理

多线程是一种强大的工具,但使用不当可能导致程序崩溃。为了确保主线程不被阻塞,我使用了dispatch_async创建全局队列,并在需要时使用共享锁来保护关键资源。多线程的使用需要谨慎,尽量避免不必要的并发。

2. 异步socket与select

异步socket是解决异步通信的基础。通过socket函数创建一个AF_INET类型的socket,并设置为异步模式。使用connect函数建立连接后,select函数可以监听文件描述符的可读状态。如果检测到可读事件,就可以立即读取数据。

3. 管道技术

为了避免轮询带来的高CPU消耗,我引入了管道技术。通过将管道的读取标志加入文件描述符集合,select函数可以自动检测可读事件。这种方式既能解决消息发送的及时性问题,又能减轻CPU负担。

4. 队列技术

BLOCK技术是一个高效的异步处理工具,特别适用于网络通信。它能够自动匹配发送和响应的消息,避免了传统方法中消息丢失和超时处理的复杂性。

5. 全局共享锁

在多线程环境中,使用全局共享锁(如NSLock)是保护共享资源的关键。避免使用对象指针来防止内存泄漏,确保程序的稳定性。

6. 单例模式

为了封装性和管理性,我采用单例模式。通过全局函数和静态变量实现长连接的管理,避免了全局变量的暴露。

7. 状态机设计

长连接涉及多种状态,如连接中、连接成功、连接异常等。通过全局变量记录状态,实现状态转换,确保系统的健壮性。

8. 消息队列优化

使用消息队列来管理发送和响应消息,结合select函数的超时功能,实现消息的实时处理。每个消息配有时间戳,超时时进行处理,确保消息的及时性。

转载地址:http://xnadz.baihongyu.com/

你可能感兴趣的文章
前端笔试题总结(三) - CSS篇
查看>>
C语言字符型、整型和变量的长度
查看>>
OpenCV camshift目标追踪
查看>>
Python Pyc文件
查看>>
Python 函数
查看>>
matlab写的反弹球没有优化界面有点丑哈哈
查看>>
AQS同步组件
查看>>
Redis缓存穿透和缓存雪崩
查看>>
AttributeError: module ‘torch‘ has no attribute ‘gesv‘
查看>>
spring 的@ComponentScan 理解
查看>>
.gitignore不起作用解决方法
查看>>
C++ e 神秘数组——vector
查看>>
day04_CSS选择器
查看>>
js 获取时间戳的方法
查看>>
C++ 底层语言的信仰-指针分类
查看>>
DFS
查看>>
2021年 第12届 蓝桥杯 第3次模拟赛真题 三C【Java版】
查看>>
Vuex使用详解
查看>>
android开发之记住密码
查看>>
[java][工具类][Arrays]
查看>>