基于nchan 开发消息服务的一些核心知识点

网友投稿 879 2022-09-26

基于nchan 开发消息服务的一些核心知识点

基于nchan 开发消息服务的一些核心知识点

以前简单说明下如何集成,在此说明下集成核心的指令,可以加速我们的集成

参考集成模式

此图以前简单介绍过

核心: 基于redis 以及一些消息管理api,我们利用nchan 提供的auth 以及消息转发能力,对于消息进行处理,对于消息做一些扩展

几个核心指令

认证&安全因为部分处理属于长连接,连接是在首次建立处理的,具有一些特殊性,与短链接是不一样的核心指令

nchan_authorize_request

当然我们也可以基于openresety 做一些扩展基于access_by_lua* 同时如果有些订阅有特殊场景的,可以直接基于nginx 的指令处理(比如ip 处理,internel,以及监听本地端口) 而且有些场景我们存在对于通道权限的回收(比如权限改变)解决方法:对于通道id 与订阅是一样的可以删除通道(直接基于api delete 操作) 对于复杂双工通道的,因为删除通道会卸载相关的连接,所以效果也是类似的

状态处理核心是对于建立连接的客户端状态统计,包含了订阅以及取消订阅

nchan_subscribe_request

nchan_unsubscribe_request

注意使用以上的时候注意配置​​proxy_ignore_client_abort on;​​ 否则消息状态可能会不正常(449 状态码)

消息转发基于消息转发hook 我们可以扩展消息,当然也可以进行发送数据的校验以及权限处理(以及的后端服务以及配置)

nchan_publisher_upstream_request

历史消息处理主要是新建立连接的消息订阅者对于消息的处理,这个还是推荐首次基于拉模式或者历史(通过短链接api),对于特殊场景的消息处理可能需要使用直接拉去历史消息的处理

nchan_subscriber_first_message

消息存储对于实际使用推荐的肯定是基于redis的(当然单机基于内存也是可以的),如果已经有redis cluster 这个是比较推荐的,可以提高系统的可靠性对于redis 的安全同时也支持配置用户密码

nchan_redis_username

nchan_redis_password

nchan_redis_server

消息订阅状态的监控nchan 包含了内置的以及一些其他扩展点,基于内置的meta 特殊通道组,我们可以获取定于以及发送信息

location ~ /channel_events/(.+) {

#channel events subscriber location

nchan_subscriber;

nchan_channel_group meta; #"meta" is a SPECIAL channel group

nchan_channel_id $1;

}

以及类似nginx stauts 的 nchan_stub_status 指令(基于可以做一些监控)

一些限制

默认每个连接可以创建的通道为255(属于设计上的考虑),如果需要突破255限制就需要使用双工通道了 具体参考​​​src/util/nchan_channel_id.c​​​ 参考配置

nchan_channel_id "$1" "$2" "common_channel";

同时对于以上处理的权限变动创建也会存在问题的(删除通道,可能会对于其他使用的有影响)

说明

以上是一些使用总结,还是推荐研究下源码

参考资料

​​​​​javascript:void(0)​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Eclipse+Cordova的Android Hybrid应用开发环境搭建
下一篇:纸片人再攻一城,国漫营销能有多吸睛?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~