讨论一个程序架构

datahandler 2011-01-14 06:22:14
场景 1.某台服务器A实时接收股票行情数据(大约3~6秒)一批到达A服务器然后由我们自己写的 P1程序接收处理。
那当P1接收到行情数据的时候如何 将这些消息共享给 A服务器上的P2程序
场景 2.某台服务器A实时接收股票行情数据(大约3~6秒)一批到达A服务器然后由我们自己写的 P1程序接收处理。
那当P1接收到行情数据的时候如何 将这些消息传送给 C服务器上的P2程序

以上场景的实现方案,大家可以举例。要求尽量保证消息的实时性和性能。

...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
庚武讲堂 2011-01-18
  • 打赏
  • 举报
回复
.net的话,可以考虑 Remoting,二进制转输, 有多种信道channel,同一主机,可以选择进程间通信方式。
以后如果将p2,p3移到其它主机,也容易配置。

应该不是很困难吧。 p2,p3启动监听,p1启动监听外部数据,有数据进入,再调用p2,p3,有那么复杂吗?
datahandler 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lianshaohua 的回复:]

引用 5 楼 tiancaolin 的回复:
引用 4 楼 lianshaohua 的回复:

这不是架构,先讨论方案,方案定了,再说架构吧;

上面说的两个场景,先实现同服务器同进程的消息传送,这个会比较容易多;
场景二是跨服务器的进程通信问题,会比较复杂, 两个都要实现,可优先考虑实现场景一。

跨服务器的进程通信,也不是很复杂的,实时性要求高就用C++吧;
[/Quote]
各位有好的案例代码吗?
ztenv 2011-01-17
  • 打赏
  • 举报
回复
这不是架构,先讨论方案,方案定了,再说架构吧;
_三皮_ 2011-01-17
  • 打赏
  • 举报
回复
方法1:SOCKET通信,P1和P2保持连接,这样可以及时传给P2,同步的
方法2:P1把数据存到数据库,P2定时到数据库去取,这样可以传给P2),是异步的
方法3:使用MS的消息队列(MSMQ),是异步的
datahandler 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]

进程间通信
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
string message = ReveiveMessage(ref m); //message为接受到的消息内容
MessageBox.Show(message);
……
[/Quote]
恩,这个我知道
ztenv 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tiancaolin 的回复:]
引用 4 楼 lianshaohua 的回复:

这不是架构,先讨论方案,方案定了,再说架构吧;

上面说的两个场景,先实现同服务器同进程的消息传送,这个会比较容易多;
场景二是跨服务器的进程通信问题,会比较复杂, 两个都要实现,可优先考虑实现场景一。
[/Quote]
跨服务器的进程通信,也不是很复杂的,实时性要求高就用C++吧;
datahandler 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lianshaohua 的回复:]

这不是架构,先讨论方案,方案定了,再说架构吧;
[/Quote]
上面说的两个场景,先实现同服务器同进程的消息传送,这个会比较容易多;
场景二是跨服务器的进程通信问题,会比较复杂, 两个都要实现,可优先考虑实现场景一。
wuyq11 2011-01-14
  • 打赏
  • 举报
回复
进程间通信
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
string message = ReveiveMessage(ref m); //message为接受到的消息内容
MessageBox.Show(message);
break;
default:
base.DefWndProc(ref m);
break;
}
}

public static string ReveiveMessage(ref System.Windows.Forms.Message m)
{
COPYDATASTRUCT cds = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT));
return cds.lpData;
}

[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
Windows进程间通信的各种方法

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧