Skip to content

Commit

Permalink
Merge pull request #152 from dotnet-campus/t/lindexi/Docs
Browse files Browse the repository at this point in the history
将使用方法提前到文档最前面
  • Loading branch information
Firito authored May 21, 2024
2 parents b783312 + 5339115 commit 479b4eb
Showing 1 changed file with 31 additions and 77 deletions.
108 changes: 31 additions & 77 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,86 +6,15 @@
|--|--|
|![](https://github.com/dotnet-campus/dotnetCampus.Ipc/workflows/.NET%20Core/badge.svg)|[![](https://img.shields.io/nuget/v/dotnetCampus.Ipc.svg)](https://www.nuget.org/packages/dotnetCampus.Ipc)|

项目级可用状态

## 特点

- 采用两个半工命名管道
- 采用 P2P 方式,每个端都是服务端也是客户端
- ~~加入消息 Ack 机制,弱化版,因为管道形式只要能写入就是成功 Ack 了~~
- 提供 PeerProxy 机制,利用这个机制可以进行发送和接收某个对方的信息
- 追求稳定,而不追求高性能

## 功能

- [x] 通讯建立
- [x] 消息收到回复机制
- [x] 断线重连功能
- [x] 大量异常处理

- [x] 支持裸数据双向传输方式
- [x] 支持裸数据请求响应模式
- [x] 支持字符串消息协议
- [x] 支持远程对象调用和对象存根传输方式
- [x] 支持 NamedPipeStreamForMvc (NamedPipeMvc) 客户端服务器端 MVC 模式

- [x] .NET Framework 4.5
- [x] .NET Core 3.1

<!-- ## 项目设计
### dotnetCampus.Ipc.Abstractions
提供可替换的抽象实现,只是有接口等
进度:等待设计 API 中,设计的时候需要考虑不同的底层技术需要的支持
应该分为两层的 API 实现,第一层为底层 API 用于给各个底层基础项目所使用。第二层是顶层 API 用于给上层业务开发者使用
### dotnetCampus.Ipc.PipeCore
提供对 dotnetCampus.Ipc.Abstractions 的部分实现
使用管道制作的 IPC 通讯
不直接面向最终开发者,或者说只有很少的类会被开发者使用到,这个项目的 API 不做设计,注重的是提供稳定的管道进程间通讯方式
特点是有很多很底层的 API 开放,以及用起来的时候需要了解管道的知识
进度:基本可用
优先实现管道,是因为管道又快有稳。但是缺点是不支持 Linux 下使用,同时稳定的管道需要设计为两个半工的管道
### dotnetCampus.Ipc
提供给上层业务开发者使用的项目,这个项目有良好的 API 设计
也许只有在初始化的时候,才需要用到少量的 dotnetCampus.Ipc.PipeCore 项目里面管道的知识
这个项目能支持的不应该只有管道一个方式,而是任何基于 dotnetCampus.Ipc.Abstractions 的抽象实现都应该支持
进度:等待 API 设计中,也许会接入 [https://github.com/jacqueskang/IpcServiceFramework](https://github.com/jacqueskang/IpcServiceFramework) 的实现,或者模拟 WCF 或 Remoting 的实现 -->

## 进度

- 基本完成 dotnetCampus.Ipc 的 API 定义和功能实现
- 完成 客户端服务器端模型
- 完成 P2P 式模型
- 完成远程调用的实现
- 完成 最小可用呆魔,支持主动和被动连接,支持通讯发送文本
- 完成断线重连
- 完成性能优化,包括内存优化
- 完成 MVC 模式
- 完成接入预编译提供上层的远程调用封装

## Usage
## 使用方法

库中提供了较为底层的通信方案,也提供了高级的封装方案(基于Json数据格式的通信方案),完整文档可参阅:

- [使用 .NET Remoting 模式的对象远程调用的 IPC 通讯方式](https://github.com/dotnet-campus/dotnetCampus.Ipc/blob/master/docs/IpcRemotingObject.md)
- [使用直接路由和 Json 通讯格式的 IPC 通讯方式](https://github.com/dotnet-campus/dotnetCampus.Ipc/blob/master/docs/JsonIpcDirectRouted.md)
- [使用 .NET Remoting 模式的对象远程调用的 IPC 通讯方式](./docs/IpcRemotingObject.md)
- [使用直接路由和 Json 通讯格式的 IPC 通讯方式](./docs/JsonIpcDirectRouted.md)

### 案例:Json通信(需要2.0.0-alpha版本以上)
### 案例:直接路由Json通信(需要2.0.0-alpha版本以上)

#### 步骤一

Expand All @@ -111,6 +40,7 @@ using dotnetCampus.Ipc.Pipes;
private JsonIpcDirectRoutedProvider CreateJsonIpcDirectRoutedProvider(string pipeName)
{
// 创建一个 IpcProvider,实际创建管道,进行IPC通信的底层对象
// 可在 IpcConfiguration 进行详细的配置,包括配置断线重连、日志等级、线程池等等
var ipcProvider = new IpcProvider(pipeName, new IpcConfiguration());

// 创建一个 JsonIpcDirectRoutedProvider,封装了通信中的Json数据解析、简化方法调用
Expand All @@ -130,12 +60,14 @@ private JsonIpcDirectRoutedProvider CreateJsonIpcDirectRoutedProvider(string pip
var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是接收消息的IPC对象");

//对无参的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler("通知消息A", () => {
ipcDirectRoutedProvider.AddNotifyHandler("通知消息A", () =>
{
Console.WriteLine("我是进程A,我收到了通知消息B,该消息无参数");
});

//对参数类型为ParamType的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler<ParamType>("通知消息B", param => {
ipcDirectRoutedProvider.AddNotifyHandler<ParamType>("通知消息B", param =>
{
Console.WriteLine($"我是进程A,我收到了通知消息B,该消息参数:{param.Message}");
});

Expand Down Expand Up @@ -191,6 +123,28 @@ var response = await ipcReceivingObjectA.GetResponseAsync<IpcResponse>("请求

*更多案例详见:* [Demo](https://github.com/dotnet-campus/dotnetCampus.Ipc/tree/master/demo)

## 特点

- 采用两个半工命名管道
- 采用 P2P 方式,每个端都是服务端也是客户端
- 提供 PeerProxy 机制,利用这个机制可以进行发送和接收某个对方的信息
- 追求稳定,而不追求高性能

## 功能

- [x] 通讯建立
- [x] 消息收到回复机制
- [x] 断线重连功能
- [x] 大量异常处理

- [x] 支持裸数据双向传输方式
- [x] 支持裸数据请求响应模式
- [x] 支持字符串消息协议
- [x] 支持远程对象调用和对象存根传输方式
- [x] 支持 NamedPipeStreamForMvc (NamedPipeMvc) 客户端服务器端 MVC 模式
- [x] 支持直接路由的 Json 数据通讯方式


## 感谢

- [jacqueskang/IpcServiceFramework](https://github.com/jacqueskang/IpcServiceFramework)
Expand Down

0 comments on commit 479b4eb

Please sign in to comment.