首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JeroMQ中以消息形式发送文件

在JeroMQ中以消息形式发送文件
EN

Stack Overflow用户
提问于 2016-12-20 19:33:36
回答 1查看 956关注 0票数 1

在JeroMQ中,如何发送具有内容、文件类型和其他属性的单消息文件。

在客户中:

生成文件消息并发送到服务器

代码语言:javascript
复制
DataInputStream inStrm = file.getContent();
ZMsg msg = ZMsg.load(inStrm);
msg.send(sender);

有任何方法来设置该消息的属性吗?像这样:

代码语言:javascript
复制
msg.setProperties("Content-Type", "application/xml");
msg.setProperties("fileName", "abc.pdf");

在服务器中,接收文件:

代码语言:javascript
复制
Poller items = new ZMQ.Poller (2);
items.register(receiver, ZMQ.Poller.POLLIN);
while (true) {
    try{
        items.poll();       
        if (items.pollin(0)) {
            ZMsg msg = ZMsg.recvMsg(receiver);
            //save file to disk
        }
    }catch(Exception e){
        LOG.error("Error while receive file: ", e);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 16:53:26

还有另一种方法。ZeroMq有多部分消息

在我看来,这是非常有用的。在jeromq/jzmq库中,您可以这样使用它:

将文件中的数据存储在字节数组中。创建一个多部分的ZMsg,将所需的所有头和数据放入其中:

代码语言:javascript
复制
ZMsg outMsg = new ZMsg();
outMsg.add(new ZFrame("application/xml"));
outMsg.add(new ZFrame("abc.pdf"));
outMsg.add(new ZFrame(bytes)); // here is the data from file
outMsg.send(outSocket);

从另一个套接字接收ZMsg并从中获取所有数据:

代码语言:javascript
复制
ZMsg inMsg = ZMsg.recvMsg(inSocket);
String contentType = inMsg.pop().toString();
String fileName = inMsg.pop().toString();
byte[] fileData = inMsg.pop().getData();

或者,您可以通过在一个字节数组中序列化所有必要的标头,并且只使用两个帧等任何其他方便的方式来完成这一任务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41249955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档