c语言编程笔录

首页 >   > 笔记大全

笔记大全

什么是消息通信 关于消息通信的实例汇总

更新时间:2023-12-30
段落一:消息通信的概念及作用 消息通信是指在程序之间进行交互的过程中,信息传递的方式。它是现代分布式系统和并行计算的重要组成部分之一。消息通信的作用体现在减少耦合程度,提高模块的可重用性,降低远程调用的成本和提高系统的并发性等方面。在计算机领域,常用的消息通信方式包括进程间通信(IPC)、远程过程调用(RPC)、Websocket、消息队列等。 下面是一个基于WebSocket协议的消息通信示例:

示例1:服务端代码

const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 8080 });

wss.on("connection", ws => {
  ws.on("message", message => {
    console.log(`Received message => ${message}`);
    ws.send(`Hello, you sent => ${message}`);
  });
  ws.send("Welcome to WebSocket server!");
});

示例1:客户端代码

const WebSocket = require("ws");
const ws = new WebSocket("ws://localhost:8080");

ws.on("open", () => {
  console.log("Connected to WebSocket server");
  ws.send("Hello WebSocket Server!");
});

ws.on("message", message => {
  console.log(`Received message => ${message}`);
});
以上代码实现了一个简单的WebSocket聊天室。当客户端连接服务器时,服务器会向客户端发送一条欢迎信息,并监听客户端的消息,如有消息则将消息发送给当前客户端。 段落二:消息传递的方式 消息传递方式主要分为同步和异步两种,并且每种方式又可以细分为阻塞和非阻塞。 同步消息传递指的是,在发送消息后,必须等待消息接收者处理完这条消息后才能继续进行下一步操作。同步方式适合于处理一些需要逐步累积结果的任务,如音频处理和图像识别等。 下面是同步消息传递的代码示例:

示例2:同步消息传递的示例

function count(base) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(base + 1);
    }, 1000);
  });
}

async function print() {
  let res = 0;
  for (let i = 0; i < 3; i++) {
    res = await count(res);
    console.log(res);
  }
}

print();
在上面的示例中,使用async/await语法,实现了同步消息传递的效果。即,在count函数中等待异步操作完成后,再进行下一步操作。 异步消息传递指的是,在发送消息后,无需等待消息接收者返回结果,程序可以立即继续执行下一步操作。异步方式适用于系统中存在大量需要同时处理的任务,如爬虫、消息队列等。 下面是异步消息传递的代码示例:

示例3:异步消息传递的示例

const queue = require("async/queue");
const q = queue((task, callback) => {
  console.log(`Task ${task.name} is being processed`);
  callback();
}, 1);

q.drain(() => {
  console.log("Completed all tasks");
});

q.push([{ name: "task1" }, { name: "task2" }, { name: "task3" }]);

在上面的示例中,使用Async库中的queue方法来异步处理任务,并设置队列并发数为1,使每个任务都按顺序处理,避免了任务互相干扰的情况。 段落三:消息传递在衡量聊天系统性能时的重要性 在聊天系统中,消息传递的速度直接影响到用户的体验。如果消息传递的速度较慢,用户需要等待一段时间才能看到他人发送的消息,这会影响用户的满意度。因此,设计高效的消息传递机制非常重要。 下面是一个基于Redis的发布订阅机制的示例:

示例4:基于Redis发布/订阅实现的简单聊天系统

const redis = require("redis");
const sub = redis.createClient(), pub = redis.createClient();

sub.on("message", (channel, message) => {
  console.log(`Received message => ${message} on channel => ${channel}`);
});

sub.subscribe("chat");

setInterval(() => {
  pub.publish("chat", `Hello from publisher at ${new Date().toISOString()}`);
}, 1000);
在上面的示例中,当有新的消息发布到频道"chat"时,订阅者会立即接收到消息,并输出到控制台。通过这种方式可以保证消息的实时性,提高聊天系统的用户体验。 段落四:消息传递的规范 在进行消息传递时,需要遵守一些规范,以保证消息的正确传递。下面是一些常见的消息传递规范: 1. 选择合适的消息传递协议。不同的应用场景需要使用不同的消息传递协议,例如:TCP、UDP、HTTP等。 2. 选择合适的消息格式。消息格式应尽可能的简单明了,尽量避免使用复杂的格式,以防消息的混乱或无法识别。 3. 应该对消息进行序列化/反序列化。这样可以保证消息在网络传输或存储过程中的正确传递。 4. 对于大量消息的传递,应该使用消息队列。消息队列可以保证任务处理顺序,避免消息阻塞或死锁等问题。 5. 为了更好的维护,消息应该规定好唯一标识符。这样可以更好的进行日志记录、监控和故障处理。 6. 消息传递的主体应该对消息的响应进行处理。例如,对于服务器的请求应该有正确的响应。