messageflow 本地和网站客户端之间传送文件设计 手稿

如何解决区分内部用户、外部用户?

案例:

发送文件,如果是内部用户,直接发送command、如果是外部用户则发送url

--------------

内部用户之间发送文件:a-b

a-b发送传输的command,messageid=1, 压入callback
b 链接comet
b-a 发送succeed,messageid=1
a调用回调callback,启动发送文件


-----------------------
方案一:

 

A::
a发送一个url,指出sendercode = 1, receivercode = 2
a启动getCometMessage侦听sendercode = 1,等待回复
b链接url, 向sendercode = 1发送通道信息 code = 3,同时进入等待(GetCometTempMessage, sendercode = 3)
a收到信息后,发送文件, postmessage, sendercode = 1, receivercode = 3

这种策略下,不需要修改任何的代码。

------------------------

方案二: 

A::
a发送一个command,内容是一个url,指出sendercode = 1, receivercode = 2,同时压入回调堆栈
b链接url, 通过nonprotocolmessage发送一个commandsucceed,包含了messageid/guid/结果
b同时进入等待(GetCometTempMessage, sendercode = 2)
a收到回调后,发送文件, postmessage, sendercode = 1, receivercode = 2

------------------------

方案一:

1. 双方传送的message需要符合一定的规则。但是这个和messageflow无关,因为直接交给了comet了。 

 

方案二:

1. 需要扩展nonprotocol接口

2. 对sendcommand的封装需要修改,因为需要让网站提取guid/messageid

 

对比之下,选择方案一。 

转载于:https://www.cnblogs.com/zc22/archive/2010/05/22/1741729.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
以下是一个简单的C++代码示例,演示了如何使用gRPC在客户端之间进行文件传输。该示例使用了Google的protobuf库和gRPC框架。 ```cpp #include <iostream> #include <fstream> #include <memory> #include <string> #include <grpcpp/grpcpp.h> #include "filetransfer.grpc.pb.h" using grpc::Channel; using grpc::ClientContext; using grpc::Status; using filetransfer::FileTransfer; using filetransfer::FileRequest; using filetransfer::FileReply; class FileTransferClient { public: FileTransferClient(std::shared_ptr<Channel> channel) : stub_(FileTransfer::NewStub(channel)) {} std::string GetFile(const std::string& filename) { FileRequest request; request.set_filename(filename); FileReply reply; ClientContext context; Status status = stub_->GetFile(&context, request, &reply); if (status.ok()) { return reply.filecontent(); } else { std::cout << status.error_code() << ": " << status.error_message() << std::endl; return "RPC failed"; } } private: std::unique_ptr<FileTransfer::Stub> stub_; }; int main(int argc, char** argv) { FileTransferClient client( grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials())); std::string filename = "example.txt"; std::string filecontent = client.GetFile(filename); std::ofstream file(filename); file << filecontent; file.close(); std::cout << "File transfer complete" << std::endl; return 0; } ``` 上述代码中,我们定义了一个`FileTransferClient`类,它使用gRPC框架创建了一个客户端。该客户端定义了一个`GetFile`方法,它接受一个文件名作为输入,并返回文件的内容。然后,在`main`函数中,我们创建了一个客户端对象并调用`GetFile`方法,将文件内容保存到本地文件中。 请注意,上述代码中的`filetransfer.grpc.pb.h`文件是使用protobuf编译器从`filetransfer.proto`文件生成的。`filetransfer.proto`文件定义了客户端和服务器之间的协议。在此示例中,`filetransfer.proto`文件定义了一个`FileTransfer`服务,该服务包含一个`GetFile`方法,用于获取文件的内容。 希望这个示例能帮助你开始使用gRPC实现客户端之间文件传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值