socket长连接的用处与模块图

简介: socket长连接的用处与模块图

select 出错! errno:22(EINVAL)。

维护socket长连接虽然很耗电,但是却有广泛的用途。如:网络电话,实时接单的应用等,优先IMP4的push功能,推送,IM。

很多小公司为了减少开发难度,用个推当派单的方式,这样的做法是架构上的错误。个推不能参与业务,只能当简单的消息提示用。个推在高峰期延迟很严重,不同的人收到延迟10秒--30分钟很正常。就会出现有的用户收到推送的消息,有的用户收不到消息或收到时早过期的情况。这种有实时群推送的业务一定要用长连接。不然每个公司通过个推服务器做,那样也太容易了吧?怎么可能呢?若你的业务不是对实时性要求很高可以用第三方socket库,若你的应用对实时性,复杂移动网络,粘包处理要求很高,那还是自己写长连接吧!

由于服务器域名固定,手机客户端的网络IP可能不断变更,服务器一般想主动找手机客户端想说声不容易。运营商发现手机经常不用网络时(大部分省份判断手机客户端最近30分钟内是否使用流量,来判断你的手机是否在用网络,若有流量就不把你IP分给别人),会把你的手机以前使用的IP分配给其它手机号,所有苹果把苹果手机网络定义为不稳定的网络,禁止发布的应用严重依赖网络的稳定性。所以服务和客户端只有建立可靠的socket长连接,每9分钟发送一次请求才能保持你IP不分配给别人,并且有服务需要向客户端下达订单时,可以通过这个长连接快速推送到手机客户端。要别APNS转了一大圈稳定,延迟小,也解决苹果对短期内推送大量类似信息被苹果服务器拦截的问题。

网络电话的原理也很简单。两个手机开启应用,经过服务器建立SOCKET长连接声音和视频格式流媒体数据流就可以了,当然要打电话是,对方收到网络电话请求消息时,弹出本地通知播放一段音乐就就可以了。网络电话简单吧!是否有开公司的冲动。这也是电话,电报的基本原理,他们都要通过服务器中转,服务器起到早期的电话接线员的角色。

尽量把业务逻辑放在SOCKET的子线程里面处理,尽量减少外部接口,要把外部接口设计成不会并发发送的接口。你想一想,你把业务接口都封装为外部接口,当你调用外部接口发送请求时,若子线程没有在访问发送对象数组,会把发送消息写入发送对象数组;若子线程在访问发送对象数组,你只能把外部发送的消息放入临时消息中,若此时你竟敢放入发送对象数组就会出现发送对象数组长度的变法,众所周知,当一个线程在访问一个数组时,若数组元素个数变化,会出现数组越界或数组个数不可以预知的崩溃。这个我在测试时实际遇到过,并且截获到崩溃桟。

所以若有能力还是自己写SOCKET,把自己的业务逻辑也包含进来,尽量减少外部调用接口,禁止通过SOCKET并发发送消息,把你的需要返回的外部接口通过BLOCK进行封装。若有能力尽量别用第三方SOCKET库,不然它封装的是很好,但是越适用的场景广泛,那么针对个别特殊情况的处理越力不从心。如:第三方库从来没有考虑过SOCKET建立完成,有的情况可读不可写的情况,网卡缓冲区满了就会出现可读不可以

写的情况。通用和全面本来就不可以兼得,全面必然会让你的程序复杂。通用就要求简洁,符合大部分要求,而非全部场景。

SOCKET模块图:可以看到SOCKET连接区域和线程内部业务处理区域是两个死循环。

目录
相关文章
|
4月前
|
网络协议 Python
python中socket模块的导入和使用基础
【4月更文挑战第3天】Python的`socket`模块是网络编程的基础,用于创建套接字、绑定地址和端口、监听连接及数据传输。首先,使用`import socket`导入模块。接着,通过`socket.socket()`创建套接字,指定地址族(如`AF_INET`)和类型(如`SOCK_STREAM`)。然后,使用`bind()`方法绑定地址和端口,`listen()`方法监听连接。服务器端通过`accept()`接受连接,`recv()`接收数据,`send()`发送响应。客户端则用`connect()`连接服务器,`send()`发送数据,`recv()`接收响应。
|
2月前
|
网络协议 Python
在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。
在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。
|
4月前
|
消息中间件 调度
socket长连接所用到的八大技术
socket长连接所用到的八大技术
33 0
|
4月前
|
网络协议 Unix Linux
Python网络编程基础(Socket编程)select模块的使用
【4月更文挑战第12天】在网络编程中,IO操作(输入/输出操作)通常是性能瓶颈之一。为了提高程序的响应速度和吞吐量,我们可以采用非阻塞IO或异步IO来处理IO操作。这些技术可以使程序在等待IO操作时不会被阻塞,从而能够继续执行其他任务。
|
域名解析 缓存 网络协议
百度统一socket长连接组件从0到1的技术实践
本文旨在探讨socket长连接技术在移动端的实践,并以iOS端为例,重点分享了百度在实现统一socket长连接组件过程中的技术选型和整体架构设计逻辑。并结合IM即时通讯聊天应用案例,展示长连接组件是如何在移动应用领域为类似业务场景提供解决方案的。
225 0
|
JSON 数据可视化 定位技术
python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)
python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)
272 0
|
移动开发 网络协议 Linux
网络编程及socket模块(2)
网络编程及socket模块(2)
网络编程及socket模块(2)
|
域名解析 缓存 网络协议
网络编程及socket模块(1)
网络编程及socket模块(1)
网络编程及socket模块(1)
|
网络协议 网络安全 Python
Python编程:socket模块
Python编程:socket模块
120 0
Python编程:socket模块
|
负载均衡 网络协议 算法
每周一个 Python 模块 | socket
Socket 提供了标准的 BSD Socket API,以便使用 BSD 套接字接口通过网络进行通信。它包括用于处理实际数据通道的类,还包括与网络相关的功能,例如将服务器的名称转换为地址以及格式化要通过网络发送的数据。
192 0