以前简单说明下如何集成,在此说明下集成核心的指令,可以加速我们的集成
参考集成模式
此图以前简单介绍过
核心: 基于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
nchan_subscriber_first_message
- 消息存储
对于实际使用推荐的肯定是基于redis的(当然单机基于内存也是可以的),如果已经有redis cluster 这个是比较推荐的,可以提高系统的可靠性
对于redis 的安全同时也支持配置用户密码
nchan_redis_username
nchan_redis_password
nchan_redis_server
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";
同时对于以上处理的权限变动创建也会存在问题的(删除通道,可能会对于其他使用的有影响)
说明
以上是一些使用总结,还是推荐研究下源码
参考资料
https://nchan.io/#getting-started
https://www.cnblogs.com/rongfengliang/p/16343179.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。