以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 用新的HttpClient取代以前的OpenQQ获取新编号的方法。因为新用户注册,是用不了OpenQQ (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=94410) |
-- 作者:chen3728060 -- 发布时间:2016/12/22 23:49:00 -- 用新的HttpClient取代以前的OpenQQ获取新编号的方法。因为新用户注册,是用不了OpenQQ 用狐表的人都知道OpenQQ是解决网络自动编号的终极正解武器,从派号的源头杜绝重复编号,这个我会用。 问题是这个工具,是基于OpenQQ登陆的情况下,与服务器通讯获得的自动编号。
我现在遇到一个有趣的问题,就是我做了一个新用户注册的窗口,里面需要生成一个自动编号作为用户ID,绝对绝对绝对不能重复! 问题是,既然是新用户注册,就肯定还没有登陆OpenQQ,那就没办法从服务器里获得最新的用户ID编号。
这个问题大家是如何解决的?除非你的系统的用户都是你自己新建,而不允许新用户自行注册。按道理,应该做那种允许客户自己注册的朋友都会遇到
我目前只想到一个奇怪的解法:就是客户点击打开注册窗口,用户表新建行的时候,用一个临时账户登录OpenQQ,获取到一个最新的用户ID后,然后断开OpenQQ。这个在少并发的情况下,可用。 但是由于共用同一个临时账号,如果并发多了,刚好同时有3个人在注册,在前一个人的OPEN QQ登录而又还没产生编号时,另外一个人登录了,就会导致前一个人的用户编号ID生不成。目前能想到的解决方法是,行新建后判断用户ID列是否为空,空的话就弹窗“服务器繁忙,请重新申请注册”,不为空就继续弹出注册窗口。
大家有更好的解决思路吗?
[此贴子已经被作者于2017/3/14 17:17:52编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/12/23 8:40:00 -- 用户ID允许断号不,如果允许,就不存在这个问题的了,每次取号+1,不管多少并发,都不会有重复的吧 |
-- 作者:chen3728060 -- 发布时间:2016/12/23 9:10:00 -- 回复:(有点蓝)用户ID允许断号不,如果允许,就不存... 可以断,随便断,具体是怎么实现?通过_identify?能有具体的思路说一下吗? |
-- 作者:有点蓝 -- 发布时间:2016/12/23 9:27:00 -- 就你上面的用法啊,用临时账户登录OpenQQ,不管有几个人注册,每次取号都会+1的啊 Dim msg As String = e.Message
If msg.StartsWith(":f") AndAlso msg.EndsWith("f:") Then msg = msg.SubString(2, msg.Length - 4) If pdbhs.ContainsKey(msg) Then \'如果存在这个类别的编号 pdbhs(msg) = pdbhs(msg) + 1 \'将该类别最大编号加1 Else pdbhs.Add(msg,1) \'如果是这个列表的首次编号,则编号等于1 End If e.ReturnValue = pdbhs(msg) \'将编号返回给客户端 End If |
-- 作者:chen3728060 -- 发布时间:2017/3/11 13:47:00 -- 现在移动端有了HttpClient,这个问题算是根治了,不需要再使用OpenQQ获取自动编号了。 服务器端的HttpRequest Select Case case "GetNewID.htm" If e.PlainText > "" Then Dim msg As String = e.PlainText \'网络自动编号--------标志:f If msg.StartsWith(":f") AndAlso msg.EndsWith("f:") Then msg = msg.SubString(2, msg.Length - 4) \'注意截取位数的关系 If CodeDic.ContainsKey(msg) Then \'如果存在这个类别的编号,msg传回来是一个自己约定的编号,例如 ItemBrandNo CodeDic(msg) = CodeDic(msg) + 1 \'将该类别最大编号加1 Else CodeDic.Add(msg,1) \'如果是这个列表的首次编号,则编号等于1 End If e.WriteString(CodeDic(msg)) \'将编号返回给客户端 End If \'网络自动编号---------标志:f End If end Select 客户端的datarowAdding \'--------HttpClient网络自动编号---------- Dim hc As New HttpClient( "Http://192.168.1.103/GetNewID.htm") hc.Timeout = 5 \'设置超时为5秒 hc .Conten t = ":f" & "ItemBigClassID" & "f:" Dim rt As String = hc.GetData() Dim id As Long If rt > "" Then If Long.TryParse(rt,id) Then e.DataRow("ProjectID") = PublicProjectID e.DataRow("ItemBigClassID") = "IBC" & Format(id,"000000000000000000") Else messagebox.show(PublicMsg_ServerError & rt) End If Else messagebox.show(PublicMsg_ServerTimeOut) End If \'-------HttpClient网络自动编号---------- 总结来说,用HttpClient和OpenQQ的原理都是一样的。不过OpenQQ限制了必须先登录才能使用,HttpClient就是自由开放无需登录的。对于新用户注册,这种既需要新编号但是又没办法登录的情况,HttpClient很好解决了这个问题。官方文档里说的这些话确实没错 [此贴子已经被作者于2017/3/11 13:49:43编辑过]
|
-- 作者:流水 -- 发布时间:2023/2/8 21:43:00 -- 学习,还没仔细看高级指南,想做一个独占编辑,却不知道怎么入手,看了杰哥的示例,大概明白了,就是不知道怎么判断心跳信号,用定时器吗? |