Foxtable(狐表)用户栏目专家坐堂 → 用新的HttpClient取代以前的OpenQQ获取新编号的方法。因为新用户注册,是用不了OpenQQ


  共有4214人关注过本帖树形打印复制链接

主题:用新的HttpClient取代以前的OpenQQ获取新编号的方法。因为新用户注册,是用不了OpenQQ

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
用新的HttpClient取代以前的OpenQQ获取新编号的方法。因为新用户注册,是用不了OpenQQ  发帖心情 Post By:2016/12/22 23:49:00 [只看该作者]

用狐表的人都知道OpenQQ是解决网络自动编号的终极正解武器,从派号的源头杜绝重复编号,这个我会用。

问题是这个工具,是基于OpenQQ登陆的情况下,与服务器通讯获得的自动编号。

 

       我现在遇到一个有趣的问题,就是我做了一个新用户注册的窗口,里面需要生成一个自动编号作为用户ID,绝对绝对绝对不能重复!

      问题是,既然是新用户注册,就肯定还没有登陆OpenQQ,那就没办法从服务器里获得最新的用户ID编号。

 

这个问题大家是如何解决的?除非你的系统的用户都是你自己新建,而不允许新用户自行注册。按道理,应该做那种允许客户自己注册的朋友都会遇到

 

我目前只想到一个奇怪的解法:就是客户点击打开注册窗口,用户表新建行的时候,用一个临时账户登录OpenQQ,获取到一个最新的用户ID后,然后断开OpenQQ。这个在少并发的情况下,可用。

       但是由于共用同一个临时账号,如果并发多了,刚好同时有3个人在注册,在前一个人的OPEN QQ登录而又还没产生编号时,另外一个人登录了,就会导致前一个人的用户编号ID生不成。目前能想到的解决方法是,行新建后判断用户ID列是否为空,空的话就弹窗“服务器繁忙,请重新申请注册”,不为空就继续弹出注册窗口。

 

大家有更好的解决思路吗?

 

 

[此贴子已经被作者于2017/3/14 17:17:52编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110569 积分:562735 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/12/23 8:40:00 [只看该作者]

用户ID允许断号不,如果允许,就不存在这个问题的了,每次取号+1,不管多少并发,都不会有重复的吧



 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(有点蓝)用户ID允许断号不,如果允许,就不存...  发帖心情 Post By:2016/12/23 9:10:00 [只看该作者]

可以断,随便断,具体是怎么实现?通过_identify?能有具体的思路说一下吗?


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110569 积分:562735 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
  发帖心情 Post By: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很好解决了这个问题。官方文档里说的这些话确实没错


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看





[此贴子已经被作者于2017/3/11 13:49:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
流水
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:279 积分:3104 威望:0 精华:0 注册:2019/7/19 15:14:00
  发帖心情 Post By:2023/2/8 21:43:00 [只看该作者]

学习,还没仔细看高级指南,想做一个独占编辑,却不知道怎么入手,看了杰哥的示例,大概明白了,就是不知道怎么判断心跳信号,用定时器吗?

 回到顶部