服务器所做的事很简单,就是把订阅的事件与句柄client_id,绑定起来,这样就能通过事件找到句柄,通过句柄就能找到客户端,以上是客户端订阅事件,实质是把一个字符串作为key,客户端连接作为value。
客户端发布事件,服务器收到发布事件的数据,通过事件关键字找到对应的客户端,可能有多个客户端订阅同一个事件,没事一个一个处理。
有点像登陆包绑定uid一样的意思,订阅还是便于理解一些的,也就是靠一个array()来实现具体功能,
事件名称作为数组下标,元素就是客户端连接句柄,一个数组下标对应的人元素可以填充多个连接句柄,也就是多个客户端可以订阅同一个事件,用uid来理解就是微信可以电脑手机同时登录。
某个客户端发布了事件,也就是通过事件去遍历这个数组了,遍历数组也就是遍历客户端,注意这里的遍历是直接遍历订阅该事件的客户端,因为通过事件就直接找到了下标。快速的让我怀疑,为什么不用C。
神奇的数组,神奇的键值对,内部是通过什么算法去实现的,暂时不知道,可能是散列吧,事件是字符串,通过hash算法可以把它转化成一个数字,这个数组就是下标了,大家肯定有疑问,不同的字符串可能会得到同一个数字,是的,那就看散列分布的是否均匀了,,还是有疑问,分布的再均匀还是有重复的,是的,重复的时候就得靠队列来遍历了。
这就是神奇的hash33,数据模型分析出来的,为什么是33,没人能具体回答出来。