英文:
Communicate with NSQ over a Websocket
问题
在用户的浏览器中运行的Web应用程序是否可以通过WebSocket连接与NSQ进行通信?
任何内置的NSQ功能或第三方库的建议都将非常有帮助。
英文:
Is it possible to communicate with NSQ over a websocket connection from a web app running in a user's browser?
Any built-in NSQ features or third-party library suggestions would be of a great help.
答案1
得分: 1
最近有一个名为WSQ的库可以解决通过WebSocket连接与NSQ进行通信的任务。
它允许在WebSocket和NSQ两端分别定义消息的编码/解码逻辑。此外,WSQ支持注入身份验证和授权逻辑,控制用户对订阅和发布主题的访问,并根据消息内容对传入消息进行过滤。
创建WSQ服务器示例:
// 创建默认配置
wsqConfig := wsq.NewConfig()
// 配置WebSocket CheckOrigin回调以绕过任何检查。
// 在生产环境中不要这样做!
wsqConfig.SetWSCheckOrigin(wsq.CheckOriginBypass)
// 创建服务器实例,指定要使用的消息和用户类型。
server := wsq.NewServer[message, *wsq.AnonymousUser](
// 要监听的地址(可选)和端口
":9980",
// WSQ配置实例
wsqConfig,
// NSQ配置实例
nsq.NewConfig(),
// WSQ Transformer结构提供NSQ和WebSocket两端的编码器/解码器
&wsq.Transformer[message]{NSQEnDec: &nsqEnDec{}, WSEnDec: &wsEnDec{}},
// 身份验证控制器
&wsq.NoAuthentication,
)
server.Run()
英文:
As of recently there is the WSQ library that solves the task of communicating to NSQ over the websocket connection.
It allows to define message encoding/decoding logic on Websocket and NSQ sides separately. Also, WSQ supports injecting authentication and authorization logic, controlling user's access to subscribing and publishing to topics, and incoming message filtering based on message's content.
Creating WSQ server example:
// Create the default config
wsqConfig := wsq.NewConfig()
// Configure Websocket CheckOrigin callback to bypass any checks.
// Don't do it in production!
wsqConfig.SetWSCheckOrigin(wsq.CheckOriginBypass)
// Create the server instance specifying message and user types to use.
server := wsq.NewServer[message, *wsq.AnonymousUser](
// Address (optional) and port to listen on
":9980",
// WSQ Config instance
wsqConfig,
// NSQ Config instance
nsq.NewConfig(),
// WSQ Transformer struct providing encoders/decoders for NSQ and Websocket sides respectivly
&wsq.Transformer[message]{NSQEnDec: &nsqEnDec{}, WSEnDec: &wsEnDec{}},
// Authentication controller
&wsq.NoAuthentication,
)
server.Run()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论