简谈socket在直播软件开发上的应用
若大的互联网系统,本着去繁就简单的原则,可以把互联网系统拆分成物理层,数据链路层,网络层,传输层,会话层,表示层,应用层这七大模块。每层模块彼此之间就像积木一样,即不知晓互相的细节,却又层层依赖,组成一个健壮的服务系统,每天成千上亿的视频,会话等网络活动才能有序的进行下去。下面先列举几个常用的互联网协议供大家了解下;http协议(最常用的网络协议,浏览网页,app访问服务端等,属于应用层),tcp/ip协议(很多上层协议的基石,属于传输层),udp/ip协议(直接扔数据包,无数据检验的协议,适用于游戏,属于传输层)。http协议在开发者开发过程中使用方便,容错性高的优点,但是作为一个比较高度封装的协议,传输速度慢,数据包过大,而且实时交互对服务器性能压力大;tcp/udp面向套接字(socket),底层传输协议效率和实时性高,但是对开发人员要求高,需要处理大量的细节。本着效率和功能提升,在云豹直播中聊天室,游戏采用了socket开发。
Socket如何实现聊天室的功能?
首先我们会在服务端搭建一个SocketSever,下面简称server端。当用户申请链接的时候,去接受它,并持有套接字的对象.通过操作套ç接字对象,服务端可以完成接收客户端,返回数据等通信动作.为了聊天室和聊天室之间的信息隔离,每创建一个直播间的时候的同时会开 辟一条线程,去专门管理直播间的信息.用户链接直播间的时候会携带身份证(id),server会根据身份id去给你分配到哪一条线程,就像去电影Ç院看电影,检票员会根据你的票和座次给你分配到几号厅一样。但是聊天室不光只是聊天,还有诸如送礼物,连麦,游戏等操作,单一的聊天基于正常的读写通信可以,单信道多操作的情况,如果还是这样,会让软件陷入一场缤纷绚丽的回调和判断之中,这里我们设计了事件绑定的概念.基于socket封装了事件绑定和消费的行为,如果要玩游戏,客户端只需要绑定游戏事件,想聊天只需要绑定聊天事件,处理自己的想处理的,发自己想发的,每一种行为之间都是独立,互不干扰的。
如何处理高并发?
用户量不多的时候,可以不考虑并发,随着单日同时人数在线的kpi增长服务器的压力会越来越大,服务器必须进行相应的优化。一个soeket占用一个IO通道,链接操作句柄越多,越占用系统资源,我们这里会利用系统IO多路复用,多个连接去分享同一条IO通道,减少通道数。数据量访问大的时候,如果一股脑的进行数据处理的话,不加拦截,服务器很可能因为短时间内不能处理那么大的数据处理,造成卡顿和资源耗尽。就好像平时生活好多人都让你现在去干他们要求的事,如果你不缓一缓,一股脑的接下来,你会不会疯了。所以我们在数据接收的时候会专门开启一条数据队列,然后将数据分配到work线程中,当队列数据超过阀值的时候,我们会将额外的数据放入等待队列,等其他数据消费完了,数据队列低于阀值的时候,再去消费等待队列的数据,就像生活中的排队一样。