[VPP] vpp_com使用

简介: [VPP] vpp_com使用

vppcom_server.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <vcl/vppcom.h>
// vppcom
// ./vppcom_server 192.168.0.29 8888
int main(int argc, char *argv[]) {
  int rv = 0;
  printf("vppcom server: %d\n", argc);
  if (argc < 3) return -1;
  struct sockaddr_in servaddr;
  memset(&servaddr, 0, sizeof(struct sockaddr_in ));
  servaddr.sin_family = AF_INET;
  //servaddr.sin_addr
  inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  servaddr.sin_port = atoi(argv[2]);
  rv = vppcom_app_create("vppcom_server\n");
  if (rv) {
    printf("vppcom_app_create\n");
    return -1;
  }
  int listenfd = vppcom_session_create(VPPCOM_PROTO_TCP, 0);
  if (listenfd < 0) {
    return -1;
  }
  printf("vppcom_session_create: %s, %s\n", argv[1], argv[2]);
  vppcom_endpt_t endpt;
  memset(&endpt, 0, sizeof(endpt));
  endpt.is_ip4 = 1;
  endpt.ip = (uint8_t*)&servaddr.sin_addr; 
  endpt.port = htons(servaddr.sin_port); //
  rv = vppcom_session_bind(listenfd, &endpt);
  if (rv < 0) {
    printf("vppcom_session_bind failed\n");
    return -1;
  }
  rv = vppcom_session_listen(listenfd, 10);
  if (rv < 0) {
    printf("vppcom_session_listen failed\n");
    return -1;
  }
  vppcom_endpt_t clientpt;
  int clientfd = vppcom_session_accept(listenfd, &clientpt, 0);
  if (clientfd < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  char buffer[1024];
  memset(buffer, 0,sizeof(buffer));
  rv = vppcom_session_read(clientfd, buffer, sizeof(buffer));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  printf("Received from client length: %d , %s\n", rv, buffer);
  rv = vppcom_session_write(clientfd, buffer, rv);
  vppcom_session_close(clientfd);
  vppcom_app_destroy();
  return 0;
}

vppcom_client.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <vcl/vppcom.h>
// vppcom
// ./vppcom_client 192.168.0.29 8888
int main(int argc, char *argv[]) {
  int rv = 0;
  printf("vppcom server: %d\n", argc);
  if (argc < 3) return -1;
  struct sockaddr_in servaddr;
  memset(&servaddr, 0, sizeof(struct sockaddr_in ));
  servaddr.sin_family = AF_INET;
  //servaddr.sin_addr
  inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  servaddr.sin_port = atoi(argv[2]);
  rv = vppcom_app_create("vppcom_server\n");
  if (rv) {
    printf("vppcom_app_create\n");
    return -1;
  }
  int connfd = vppcom_session_create(VPPCOM_PROTO_TCP, 0);
  if (connfd < 0) {
    return -1;
  }
  printf("vppcom_session_create: %s, %s\n", argv[1], argv[2]);
  vppcom_endpt_t endpt;
  memset(&endpt, 0, sizeof(endpt));
  endpt.is_ip4 = 1;
  endpt.ip = (uint8_t*)&servaddr.sin_addr; 
  endpt.port = htons(servaddr.sin_port); //
  rv = vppcom_session_connect(connfd, &endpt);
  if (rv < 0) {
    printf("vppcom_session_bind failed\n");
    return -1;
  }
  char *str = "vppcomclient\n";
  rv = vppcom_session_write(connfd, str, strlen(str));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  char buffer[1024] = {0};
  rv = vppcom_session_read(connfd, buffer, sizeof(buffer));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  printf("Received from client length: %d , %s\n", rv, buffer);
  vppcom_session_close(connfd);
  vppcom_app_destroy();
  return 0;
}


相关文章
|
存储 测试技术 网络安全
冲破内核限制:使用DPDK提高网络应用程序的性能(下)
冲破内核限制:使用DPDK提高网络应用程序的性能
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
971 13
|
缓存 网络协议 Linux
20个基于DPDL开源项目,带你冲破内核瓶颈(中)
20个基于DPDL开源项目,带你冲破内核瓶颈(中)
|
存储 缓存 安全
从原理到实践:掌握DPDK内存池技术(下)
从原理到实践:掌握DPDK内存池技术
|
缓存 前端开发 Linux
PAS工具分享 - FrameScope与RTRadar
本次分享的主题是PAS工具分享 - FrameScope与RTRadar,由阿里云基础软件系统研发团队工程师刘依男、苏峰分享。主要分为三个部分: 1. PAS性能分析套件综述 2. PAS FrameScope 3. PAS RTRadar
409 0
|
Linux 持续交付 开发工具
版本控制系统的选择:Git vs. Mercurial
【6月更文挑战第20天】Git vs. Mercurial: 两者都是流行的DVCS,Git由Linus Torvalds创建,以其速度和复杂分支管理著称,适合大型项目和有经验的开发者。Mercurial,由Matt Mackall开发,以其简洁命令行和易用性吸引初学者。Git社区更大,扩展更丰富,而Mercurial在某些场景下可能更直观。选择取决于项目需求、团队经验和偏好。
|
编译器 Linux 网络性能优化
VPP使用DPDK纳管主机网卡
VPP使用DPDK纳管主机网卡
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
1453 4
下一篇
开通oss服务