• 发送端/接收端
 using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets; namespace NetMQIPCServer
{
class Program
{
private const string topic = "unity3d";
private static bool running = true;
static void Main(string[] args)
{
Console.WriteLine("Main thread id = {0}", Thread.CurrentThread.ManagedThreadId); // 进程内通信
//pub.Bind("inproc://unity3d");
//sub.Connect("inproc://unity3d"); // 跨进程通信
//var pub = new PublisherSocket();
//var sub = new SubscriberSocket();
//pub.Bind("ipc:///unity3d/0");
//sub.Connect("ipc:///unity3d/0");
//sub.Subscribe(topic); // 定向接收[NonBlock]
//var pub = new PublisherSocket();
//var sub = new SubscriberSocket();
//pub.Bind("ipc:///unity3d/0");
//sub.Connect("ipc:///unity3d/0");
//sub.Subscribe(topic);
//var proactor = new NetMQProactor(sub, (socket, message) =>
//{
// //Console.WriteLine(message);
// foreach (var b in message[1].Buffer)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received message in thread {0}", Thread.CurrentThread.ManagedThreadId);
//}); // TCP
var pub = new PublisherSocket();
var sub = new SubscriberSocket();
pub.Bind("tcp://*:2017");
sub.Connect("tcp://localhost:2017");
sub.Subscribe(topic);
var proactor = new NetMQProactor(sub, (socket, message) =>
{
//Console.WriteLine(message);
foreach (var b in message[].Buffer)
{
Console.Write("{0:x2}", b);
Console.Write(" ");
}
Console.WriteLine("Received message in thread {0}", Thread.CurrentThread.ManagedThreadId);
}); // 轮询模式
//var poller = new NetMQPoller();
//poller.Add(sub);
//sub.ReceiveReady += (sender, eventArgs) =>
//{
// bool more = false;
// byte[] bytes = null;
// eventArgs.Socket.ReceiveFrameBytes(out more);
// if (more)
// {
// bytes = eventArgs.Socket.ReceiveFrameBytes();
// foreach (var b in bytes)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received bytes in thread {0}", Thread.CurrentThread.ManagedThreadId);
// }
//}; new Thread(() =>
{
while (running)
{
Console.WriteLine("PublisherSocket:Send Bytes in thread {0}.", Thread.CurrentThread.ManagedThreadId);
pub.SendMoreFrame(topic).SendFrame(new byte[] { 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3 });
Thread.Sleep();
}
}).Start(); //new Thread(() =>
//{
// bool more = false;
// byte[] bytes = null;
// while (running)
// {
// if (sub.HasIn)
// {
// sub.ReceiveFrameBytes(out more);
// if (more)
// {
// bytes = sub.ReceiveFrameBytes();
// foreach (var b in bytes)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received bytes in thread {0}", Thread.CurrentThread.ManagedThreadId);
// }
// }
// }
//}).Start();
// 在主线程轮询[Block]
//poller.Run();
// 异步轮询[NonBlock]
//poller.RunAsync(); Console.ReadKey();
running = false;
Thread.Sleep();
//poller.Stop();
//poller.StopAsync();
pub.Close();
sub.Close();
NetMQConfig.Cleanup();
}
}
}
  • 运行结果如图

NetMQ官方主页:http://netmq.readthedocs.io/en/latest/

NetMQ用作IPC的实例的更多相关文章

  1. MySQL搭建系列之多实例

    所谓多实例.就是在一台server上搭建.执行多个MySQL实例,每一个实例使用不同的服务port.通过不同的socket监听:物理上,每一个实例拥有独立的參数配置文件及数据库. 通常情况下.一台se ...

  2. ASP.NET Core中的依赖注入(3): 服务的注册与提供

    在采用了依赖注入的应用中,我们总是直接利用DI容器直接获取所需的服务实例,换句话说,DI容器起到了一个服务提供者的角色,它能够根据我们提供的服务描述信息提供一个可用的服务对象.ASP.NET Core ...

  3. SQL Server5个系统数据库

    SQL Server一共有5个系统数据库:master:记录SQL Server系统的所有系统级信息,例如:登陆账户信息.链接服务器和系统配置设置.记录其他所有数据库的存在.数据文件的位置.SQL S ...

  4. Java ClassLoader 原理详细分析(转)

    转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管 ...

  5. 纪念我曾经的 JAVA 姿势--转

    原文地址:https://segmentfault.com/a/1190000007122432?hmsr=toutiao.io&utm_medium=toutiao.io&utm_s ...

  6. 深入分析Java ClassLoader原理

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  7. Java --ClassLoader创建、加载class、卸载class

    一.java提供了三种ClassLoader对Class进行加载: 1.BootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库 ...

  8. Java--笔记(2)

    11.根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件: 1)互斥条件(Mutual ...

  9. java classloader

    一个jvm中默认的classloader有Bootstrap ClassLoader.Extension   ClassLoader.App ClassLoader,分别各司其职: Bootstrap ...

随机推荐

  1. 数据库MySQL之show processlist

    在实际项目开发中,如果我们对数据库的压力比较大,比如有大批量的查询或者插入等sql,尤其是多线程插入等情况,针对部分执行比较慢的sql,我们可以将其kill掉,常用的一个命令就是show proces ...

  2. Vue的H5页面唤起支付宝支付

    目前项目中比较常用的第三方支付无非就是支付宝支付和微信支付.下面介绍一下Vue中H5页面如何使用支付宝支付.其实很简单的,只不过是调自己后台的一个接口而已(后台根据支付宝文档,写好支付接口). 触发支 ...

  3. Git的学习和使用

    1.1. Git 了解git的仓库概念 熟悉何为版本控制,了解分布式版本控制(git)和集中式版本控制(svn) 能够熟练使用git的基本指令完成仓库的初始化/添加/提交/日志/回退/分支等操作 gi ...

  4. 超级丑数--用查找的api解决

    质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数. 质因数(素因数或质因子)在数论里是指能整除给定正整数的质数.除了1以外,两个没有其他共同质因子的正 ...

  5. C#从委托、lambda表达式到linq总结

    前言 本文总结学习C#必须知道的基础知识,委托.监视者模式.常用lambda表达式.linq查询,自定义扩展方法,他们之间有什么关系呢?匿名委托是如何演变成lambda表达式,lambda再如何导出l ...

  6. 分布式集群HA模式部署

    一:HDFS系统架构 (一)利用secondary node备份实现数据可靠性 (二)问题:NameNode的可用性不高,当NameNode节点宕机,则服务终止 二:HA架构---提高NameNode ...

  7. C语言118. 杨辉三角

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5输出:[ [1], [1,1], [1,2,1], [1, ...

  8. C++基类、派生类、虚函数的几个知识点

    1.尽管派生类中含有基类继承来的成员,但派生类初始化这部分变量需要调用基类的构造函数. class A { private: int x; virtual void f(){cout<<& ...

  9. 爬取漫画DB上的JoJo的奇妙冒险 第七部 飙马野郎

    SBR是JOJO系列我最喜欢的一部,所以今天把漫画爬取到本地,日后慢慢看. import re import time import requests from requests import cod ...

  10. data_analysis 第一课

    1.anaconda的安装与使用 在官网下载anaconda的客户端,因为python有2和3之分,所以有两个版本可以供选择,由于该课程使用2作为开发工具,选择anaconda2下载安装. 安装好之后 ...