2024年前端最新分布式进阶(十五)ZMQ_zmq,web开发学什么

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

import org.zeromq.ZMQ;

import org.zeromq.ZMQ.Context;

import org.zeromq.ZMQ.Socket;
 
/**

* Pubsub envelope publisher

*/

public class psenvpub {

public static void main (String[] args) throws Exception {

// Prepare our context and publisher

Context context = ZMQ.context(1);

Socket publisher = context.socket(ZMQ.PUB);

publisher.bind(“tcp://*:5563”);

while (!Thread.currentThread ().isInterrupted ()) {

// Write two messages, each with an envelope and content

publisher.sendMore (“A”);

publisher.send (“We don’t want to see this”);

publisher.sendMore (“B”);

publisher.send(“We would like to see this”);

}

publisher.close ();

context.term ();

}

}



发布端需要通过`context.socket(ZMQ.PUB)`表示为发布端,通过bind方法来创建发布端连接,等待订阅者连接。


之后通过send方法将数据发送到出去。



之后来写订阅端代码



package cn.edu.ujn.pub_sub;

import org.zeromq.ZMQ;

import org.zeromq.ZMQ.Context;

import org.zeromq.ZMQ.Socket;

/**

* Pubsub envelope subscriber

*/

public class psenvsub {

public static void main (String[] args) {

// Prepare our context and subscriber

Context context = ZMQ.context(1);

Socket subscriber = context.socket(ZMQ.SUB);

subscriber.connect(“tcp://localhost:5563”);

subscriber.subscribe(“B”.getBytes());

while (!Thread.currentThread ().isInterrupted ()) {

// Read envelope with address

String address = subscriber.recvStr ();

// Read message contents

String contents = subscriber.recvStr ();

System.out.println(address + " : " + contents);

}

subscriber.close ();

context.term ();

}

}



客户端通过connect进行连接,之后通过recv来进行数据接收。



下面贴出REQ\_REP(订阅发布模式)模式下的代码:


发送端:



package cn.edu.ujn.req_rep;

//

//  Hello World server in Java

//  Binds REP socket to tcp://*:5555

//  Expects “Hello” from client, replies with “World”

//

import org.zeromq.ZMQ;

public class hwserver {

private static int i = 0;

public static void main(String[] args) throws Exception {

ZMQ.Context context = ZMQ.context(1);

//  Socket to talk to clients

ZMQ.Socket responder = context.socket(ZMQ.REP);

responder.bind(“tcp://*:5555”);

while (!Thread.currentThread().isInterrupted()) {

// Wait for next request from the client

byte[] request = responder.recv(0);

System.out.println("Received " + new String(request) + i++);

// Do some ‘work’

Thread.sleep(1000);

// Send reply back to client

String reply = “World”;

responder.send(reply.getBytes(), 0);

}

responder.close();

context.term();

}

}



接收端:



package cn.edu.ujn.req_rep;

//  Hello World client in Java

//  Connects REQ socket to tcp://localhost:5555

//  Sends “Hello” to server, expects “World” back

import org.zeromq.ZMQ;

public class hwclient {

public static void main(String[] args) {

ZMQ.Context context = ZMQ.context(1);

//  Socket to talk to server

System.out.println(“Connecting to hello world server…”);

ZMQ.Socket requester = context.socket(ZMQ.REQ);

requester.connect(“tcp://localhost:5555”);

for (int requestNbr = 0; requestNbr != 10; requestNbr++) {

String request = “Hello”;

System.out.println("Sending Hello " + requestNbr);

requester.send(request.getBytes(), 0);

byte[] reply = requester.recv(0);

System.out.println("Received " + new String(reply) + " " + requestNbr);

}

requester.close();

context.term();

}

}



下面贴出Para\_Pipe(基于分布式处理(管道模式))模式下的代码:


发送端:



package cn.edu.ujn.para_pipe;

import java.util.Random;

import org.zeromq.ZMQ;

//  Task ventilator in Java

//  Binds PUSH socket to tcp://localhost:5557

//  Sends batch of tasks to workers via that socket

public class taskvent {

public static void main (String[] args) throws Exception {

ZMQ.Context context = ZMQ.context(1);

//  Socket to send messages on

ZMQ.Socket sender = context.socket(ZMQ.PUSH);

sender.bind(“tcp://*:5557”);

//  Socket to send messages on

ZMQ.Socket sink = context.socket(ZMQ.PUSH);

sink.connect(“tcp://localhost:5558”);

System.out.println("Press Enter when the workers are ready: ");

System.in.read();

System.out.println(“Sending tasks to workers\n”);

//  The first message is “0” and signals start of batch

sink.send(“0”, 0);

//  Initialize random number generator

Random srandom = new Random(System.currentTimeMillis());

//  Send 100 tasks

int task_nbr;

int total_msec = 0;     //  Total expected cost in msecs

for (task_nbr = 0; task_nbr < 100; task_nbr++) {

int workload;

//  Random workload from 1 to 100msecs

workload = srandom.nextInt(100) + 1;

total_msec += workload;

System.out.print(workload + “.”);

String string = String.format(“%d”, workload);

sender.send(string, 0);

}

System.out.println(“Total expected cost: " + total_msec + " msec”);

Thread.sleep(1000);              //  Give 0MQ time to deliver

sink.close();

sender.close();

context.term();

}

}


中介端:



package cn.edu.ujn.para_pipe;

import org.zeromq.ZMQ;

//  Task worker in Java

//  Connects PULL socket to tcp://localhost:5557

//  Collects workloads from ventilator via that socket

//  Connects PUSH socket to tcp://localhost:5558

//  Sends results to sink via that socket

public class taskwork {

public static void main (String[] args) throws Exception {

ZMQ.Context context = ZMQ.context(1);

//  Socket to receive messages on

ZMQ.Socket receiver = context.socket(ZMQ.PULL);

receiver.connect(“tcp://localhost:5557”);

//  Socket to send messages to

ZMQ.Socket sender = context.socket(ZMQ.PUSH);

sender.connect(“tcp://localhost:5558”);

//  Process tasks forever

while (!Thread.currentThread ().isInterrupted ()) {

String string = new String(receiver.recv(0)).trim();

long msec = Long.parseLong(string);

//  Simple progress indicator for the viewer

System.out.flush();

System.out.print(string + ‘.’);

//  Do the work

Thread.sleep(msec);

//  Send results to sink

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

o the work

Thread.sleep(msec);

//  Send results to sink

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-feiaetLg-1715023168248)]

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值