自己动手,写一个分布式系统(附c#代码示例)
发布日期:2021-05-09 09:06:56 浏览次数:13 分类:博客文章

本文共 4795 字,大约阅读时间需要 15 分钟。

���������������������������������������������������������������WCF���WCF���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������.net������������������������������������������������������������EasyNetMessage������������������������������������������������������������������������string���byte���������������������������������������������M������������������������������������������������������������������������������������������������������������������������������������������������������������

������������

���������������������������������   internal int AddCall(int value1, int value2)���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

���������������

a) ������������

���������������������������������������������������CallId������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������������������������������ManualResetEvent���������������CallId���ManualResetEvent������������������������������������������������������������ManualResetEvent���

//callid���������������        Dictionary
_callEventGroup = new Dictionary
(); //callId��������������������� Dictionary
_callResultGroup = new Dictionary
(); internal int AddCall(int value1, int value2) { //��������������� NetCallAdd add = new NetCallAdd(); add.Value1 = value1.ToString(); add.Value2 = value2.ToString(); MonitorClient client = GetCurAppClient(); if (client == null) throw new Exception("socket������������"); //���������������������������CallId������ ManualResetEvent callEvent = new ManualResetEvent(false); lock (_callEventGroup) { _callEventGroup.Add(add.CallId, callEvent); } //������������ EN_SendDataResult result = _netServer.SendData(client.ClientSocket, add.ToEasyMessage().ToNetPacket()); if (result != EN_SendDataResult.ok) { lock (_callEventGroup) { _callEventGroup.Remove(add.CallId); } throw new Exception("���������������������"); } //������������ callEvent.WaitOne(3000); _callEventGroup.Remove(add.CallId); //��������������� lock (_callResultGroup) { if (_callResultGroup.ContainsKey(add.CallId)) { NetCallAddAck ack = _callResultGroup[add.CallId]; return int.Parse(ack.Result); } } throw new Exception("���������������������"); }

b���������������

  ���������������������������������������������������������������������������CallId���������������ManualResetEvent������������������������������������������������������������������

  ���������������������������������������������key���CallId������������ManualResetEvent���Set������������������������������������������������������CallId������������������������������

internal void OnRcvAck(NetCallAddAck addAck)        {            //������callid������������            ManualResetEvent callEvent = null;            lock (_callEventGroup)            {                if (!_callEventGroup.ContainsKey(addAck.CallId))                    return;                callEvent =_callEventGroup[addAck.CallId];            }            //���������������������������            lock (_callResultGroup)            {                _callResultGroup.Remove(addAck.CallId);                _callResultGroup.Add(addAck.CallId, addAck);            }            //������������������������,������������������������������������������            callEvent.Set();        }

���������������������������������������������������������������������������Redis������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������ 

上一篇:采用WPF技术开发截图程序 (可下载)
下一篇:采用QT技术,开发OFD电子文档阅读器

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月09日 02时03分30秒