以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 多人同时使用时系统卡死 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=196541) |
-- 作者:drcqh -- 发布时间:2025/5/11 22:19:00 -- 多人同时使用时系统卡死 请教老师,项目使用OpenQQ实现数据的同步,但在多人使用时如有一人在操作,其它电脑就卡死了,这是什么原因?如何解决 |
-- 作者:有点蓝 -- 发布时间:2025/5/11 22:35:00 -- 使用的什么数据库? |
-- 作者:drcqh -- 发布时间:2025/5/12 10:59:00 -- sql server |
-- 作者:有点蓝 -- 发布时间:2025/5/12 11:46:00 -- Foxtable的事件都是按顺序处理的,同一个事件多人触发,会等待前面的处理完毕。如果过于频繁的更新数据并更新同步,是会有卡这种情况的。 方便把服务端openqq的事件发上来看看能不能优化一下。
|
-- 作者:drcqh -- 发布时间:2025/5/12 12:49:00 -- 一、服务端: 1、ReceivedMessage事件: If e.Message = "+user+" Then \'如果收到"+user+"信息时,重新加载用户表 DataTables("Users").Load() End If Dim msg As String = e.Message If msg.StartsWith(":g") AndAlso msg.EndsWith("g:") Then msg = msg.SubString(2, msg.Length - 4) If flbhs.ContainsKey(msg) Then \'如果存在这个月的编号.flbhs为全局变量 flbhs(msg) = flbhs(msg) + 1 \'将该月最大编号加1 Else flbhs.Add(msg,1) \'如果这个月的首次编号,则编号等于1 End If End if 2、UserLogging事件: If e.User IsNot Nothing Then e.Success=True For Each u As UserInfo In users If u.Name<>e.User.Name Then If u.Group>"" Then e.Buddies.Add(u.Group & "." & u.Name) End If End If Next Eles If e.ReturnValue = flbhs(msg) End If 二、客户端: 1、ReceivedMessage事件: Dim msg As String = e.Message \'MessageBox.Show("我是客户端接收到的信息:" & msg) If msg.StartsWith("U#") Then \'表示修改了某行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2)) If dr IsNot Nothing Then dr.Load() \'重新加载此行 End If End If ElseIf msg.StartsWith("A#") Then \'表示增加了行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then DataTables(pts(1)).AppendLoad("[_Identify] = " & pts(2)) End If ElseIf msg.StartsWith("D#") Then \'表示删除了行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then DataTables(pts(1)).RemoveFor("[_Identify] = " & pts(2)) End If ElseIf msg.StartsWith("M#") Then \'M表示移除行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then DataTables(pts(1)).RemoveFor("[_Identify] = " & pts(2)) \'移除行 End If
End If If msg.StartsWith("+@") Then \'如: +@|主键|处方号|医生姓名 Dim pts() As String =msg.Split("|") dsfs.add(pts(1) & "|" & pts(2) & "|" & pts(3)) \'dsfs为全局变量待收费处方 Forms("信息提示窗口").Open End If |
-- 作者:有点蓝 -- 发布时间:2025/5/12 13:35:00 -- 如果是某个客户端大批量的更新、新增或者删除行,建议就不要使用这个功能了,建议直接发个消息给客户端提醒手工更新吧! |
-- 作者:drcqh -- 发布时间:2025/5/12 22:14:00 -- 好的,谢谢! |