许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  WebSocket+队列(先进先出)解决PASS云计算书排队难题

WebSocket+队列(先进先出)解决PASS云计算书排队难题

阅读数 5
点赞 0
article_banner

PSS云计算书介绍在这里

原来想用NSQ消息队列,原来不适合我的场景。

   NSQ无序?也不晓得什么无序,是否先进先出。

   而http协议又是只能一次请求一个回复。而排队就必须不断的广播目前前面有多少人,过几秒再刷新一下还有几人,后面又来了几个人……甚是热闹,这不就是直播(聊天室)刷弹幕嘛……

   只能硬着头皮弄成websocket了,其实就3行+2行代码而已:

   服务端:

ws, err := upgrader.Upgrade(c.Ctx.ResponseWriter, c.Ctx.Request, nil)//服务端建立websocket连接err := client.WriteJSON(msg)//向浏览器客户端写入信息err := ws.ReadJSON(&msg)//从浏览器读取计算参数

页面:

var ws = new WebSocket('ws://' + window.location.host + '/v1/mathcad/postmath2');//与服务端建立websocket连接ws.send(obj);//向服务器发送计算信息

要计算前面有多少人就必须用队列吧(还有其他啥法子么?)
golang队列我搜……

   代码也就几行

//向队列中添加元素func (entry *sliceEntry) Offer(e Element) {entry.element = append(entry.element, e)}//移除队列中最前面的额元素func (entry *sliceEntry) Poll() Element {if entry.IsEmpty() {fmt.Println("queue is empty!") return nil}firstElement := entry.element[0]entry.element = entry.element[1:]//从index=1开始,即移除了return firstElement}

那如果说这都没怎么体现咱们设计要素?继续看。

   不同的人使用同一个模板计算,就必须排队。而不同的人用不同的模板计算,则用 多线程  计算即可,不用排队(当然也是要有限度……)

   看出来了吧,给用户浏览器发送消息的时候就必须考虑哪些用户是一个组的,即,使用同一个模板的用户是一个组,排队 信息 就只能发给这个组的所有人,而这个组的每个人收到的前面还剩多少人在排队的数量是不同的。

   利用上面这个队列代码,稍加改造,即element里要存用户websocket连接信息,templeID模板id,userID,websocket连接信息为var clients   = make(map[*websocket.Conn]bool)

map是无序的。map用来对 数组  去重似乎是最佳方案(还有更好的去重方法吗?)

   先到这了,继续探索。

   某些队列组件是支持分组的。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空