Just for fun——C#应用和Nodejs通讯

进程通信

常见的进程通讯的方法有:

  • 管道(Pipe)
  • 命名管道
  • 信号
  • 消息队列
  • 其他

管道是比较简单基础的技术了,所以看看它。

Node IPC支持

Node官方文档中Net模块写着:

IPC Support

The net module supports IPC with named pipes on Windows,
and UNIX domain sockets on other operating systems.

Class: net.Server

Added in: v0.1.90 This class is used to create a TCP or IPC server.

可以看到,Node在Windows上可以用命名管道进行进程通信。

测试

C#

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }

    private const string PIPE_NAME = "salamander_pipe";

    private void btnStartListen_Click(object sender, EventArgs e)
    {
        Task.Factory.StartNew(StartListen);
    }

    private void StartListen()
    {
        for (;;)
        {
            using (NamedPipeServerStream pipeServer =
                new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, 1))
            {
                try
                {
                    pipeServer.WaitForConnection();
                    pipeServer.ReadMode = PipeTransmissionMode.Byte;
                    using (StreamReader sr = new StreamReader(pipeServer))
                    {
                        string message = sr.ReadToEnd();
                        txtMessage.Invoke(new EventHandler(delegate
                        {
                            txtMessage.AppendText(message + "\n");
                        }));
                    }
                }
                catch (IOException ex)
                {
                    MessageBox.Show("监听管道失败:" + ex.Message);
                }
            }
        }
    }
}

设计界面很简单:

clipboard.png

Nodejs

const net = require('net');

const PIPE_NAME = "salamander_pipe";
const PIPE_PATH = "\\\\.\\pipe\\" + PIPE_NAME;

let l = console.log;

const client = net.createConnection(PIPE_PATH, () => {
    //'connect' listener
    l('connected to server!');
    client.write('world!\r\n'); 
    client.end();
});

client.on('end', () => {
    l('disconnected from server');
});

代码很简单,创建一个连接,然后发送数据。

测试效果

clipboard.png

总结

多看文档哦^_^
C#代码下载


Salamander
上帝在我很小的时候送给我了两个苹果,一个红苹果,一个蓝苹果。红苹果代表疯狂,蓝苹果代表思考
6.7k 声望
407 粉丝
0 条评论
推荐阅读
Java AtomicInteger类使用
这个问题发生的原因是++counter不是一个原子性操作。当要对一个变量进行计算的时候,CPU需要先从内存中将该变量的值读取到高速缓存中,再去计算,计算完毕后再将变量同步到主内存中。这在多线程环境中就会遇到问...

pigLoveRabbit2阅读 2.3k

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木66阅读 6.2k评论 16

从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木44阅读 7.4k评论 6

从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木33阅读 6.2k评论 9

从零搭建 Node.js 企业级 Web 服务器(五):数据库访问
回顾 从零搭建 Node.js 企业级 Web 服务器(一):接口与分层,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,控制层与服务层实现了业务处理过程,模型层定义了业务实体并以 对象-关系...

乌柏木34阅读 4.6k评论 9

从零搭建 Node.js 企业级 Web 服务器(十三):断点调试与性能分析
Node.js 官方提供了断点调试机制,出于安全性考虑默认为关闭状态,可以通过 node 参数 --inspect 或 --inspect-brk 开启,配合 IDE 能够非常方便地调试代码,本章就上一章已完成的项目 licg9999/nodejs-server-ex...

乌柏木31阅读 3.9k评论 9

从零搭建 Node.js 企业级 Web 服务器(八):网络安全
计算机网络依据 TCP/IP 协议栈分为了物理层、网络层、传输层、应用层,通常基础设施供应商会解决好前三层的网络安全问题,需要开发者自行解决应用层的网络安全问题,本章将着重表述应用层常见的网络安全问题及处...

乌柏木33阅读 5.8k评论 1

6.7k 声望
407 粉丝
宣传栏