Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

将使用方法提前到文档最前面 #152

Merged
merged 1 commit into from
May 21, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading