ZeroC—ICE分布式数据同步Demo

该博客介绍了如何在Windows环境下,利用ZeroC ICE进行MySQL数据库的数据同步。博主使用了MySQL 5.6、VS2012和ICE 3.5.0版本,通过配置客户端与服务器的info.conf和serverInfo.conf文件,以及DBOperator.ice、Client.cpp和Server.cpp代码,展示了数据同步的过程。目前的Demo仅作为基础框架,实际功能需要进一步完善。
摘要由CSDN通过智能技术生成

环境介绍:

操作系统:Windows

数据库:MySQL 5.6

IDE:VS2012

ICE版本:3.5.0

MySQL Lib版本:5.6.12

 

配置文件:

客户端配置文件 info.conf

# IP和端口
ServerIP = 127.0.0.1
ServerPort = 10000

# DateBase信息
DataBase = demoice
Table = demo
HostName = 127.0.0.1
SqlName = root
SqlPwd = *****


服务器配置文件 serverInfo.conf

# DateBase信息
DataBase = demoICE
Table = syn
HostName = 127.0.0.1
SqlName = root
SqlPwd = ******


 

 

 

数据库脚本:

CREATE TABLE demo(
  name VARCHAR(20) PRIMARY KEY,
  pwd VARCHAR(20) NOT NULL
);

CREATE TABLE syn(
  name VARCHAR(20) PRIMARY KEY,
  pwd VARCHAR(20) NOT NULL
);

 

demo为源数据,syn为同步目标

 

Slice文件:

DBOperator.ice

// **********************************************************************
//
// Author: X_White
//
// **********************************************************************

#pragma once

module dbOperator {
	interface DBOprtr {
		int synDropTab();
		int synAllData();
		int synRowData();
		int synSingleData(string s);
		int transmitData(string s, string index);
	};
};


 

客户端:

Client.cpp

// **********************************************************************
//
// Copyright (c) 2003-2013 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

#include <Ice/Ice.h>
#include <Printer.h>
#include <DBOperator.h>

#include <cstdio>
#include <iostream>
#include <cstring>
#include <time.h>
#include <WinSock2.h>
#include <mysql.h>
#include <vector>

#pragma comment(lib, "libmysql.lib")

using namespace std;
using namespace Demo;
using namespace dbOperator;

typedef struct synData {
	int count;
	char data[20][20];
}synData;

void ice_strcpy(char *src, char *des) {
	size_t i;
	size_t len1 = strlen(src);
	size_t len2 = strlen(des);
	for(i = 0; i < len2; i++) {
		src[i] = des[i];
	}
	src[i] = '\0';
}

int writeLog() {
	return 0;
}

/*
 * Author:X_White
 * initConf读取配置文件info.conf 并返回serverIP、端口号、数据库dbName、表名
 *
*/
int initConf(char *desIP, char *desPort, char *dbName, char *tableName, char *hostName, char *sqlName, char *sqlPwd) {
	FILE *conffp;
	errno_t err;
	char buf[1024];
	err = freopen_s(&conffp, "../conf/info.conf", "r", stdin);
	if(err != 0) {
		writeLog();
		exit(1);
	}
	while(gets_s(buf)) {
		if('#' == buf[0]) continue;
		char n1[128], n2[128], equ[128];
		memset(n1
zero ICE快速入门文档, ice是最优秀的rpc框架。 4、开发服务端代码如下 步骤一:编写Servant类即带有Disp的存根文件也就是说继承_HelloWorldDisp 这个类,这个类是个抽象类定义如下: public abstract class _HelloWorldDisp extends Ice.ObjectImpl implements HelloWorld{} servant类是ice所定义的接口,在服务器端的实现类。我们在该类中可以编写服务器端对请求的具体处理。 代码如下: package myHelloWorld.server; import Ice.Current; import myHelloWorld._HelloWorldDisp; public class HelloWorld_gaojs extends _HelloWorldDisp{ private static final long serialVersionUID = 1L; public void say(String s, Current __current) { System.out.println("Hello World!"+" the string s is " + s); } } 步骤二:创建远程的服务器类 package myHelloWorld.server; public class ServerStart { /** * @param args */ public static void main(String[] args) { int status = 0; // Communicator实例,是ice run time的主句柄 Ice.Communicator ic = null; try { // 调用Ice.Util.Initialize()初始化Ice run time System.out.println("初始化ice run time..."); ic = Ice.Util.initialize(args); // args参数可传可不传 // 创建一个对象适配器,传入适配器名字和在10000端口处接收来的请求 System.out.println("创建对象适配器,监听端口10000..."); Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -p 10000"); // 实例化一个PrinterI对象,为Printer接口创建一个servant System.out.println("为接口创建servant..."); Ice.Object object = new HelloWorld_gaojs(); // 调用适配器的add,告诉它有一个新的servant,传递的参数是刚才的servant,这里的“gaojs”是Servant的名字 System.out.println("对象适配器加入servant..."); adapter.add(object, Ice.Util.stringToIdentity("gaojs")); // 调用适配器的activate()方法,激活适配器。被激活后,服务器开始处理来自客户的请求。 System.out.println("激活适配器,服务器等待处理请求..."); adapter.activate(); // 这个方法挂起发出调用的线程,直到服务器实现终止为止。或我们自己发出一个调用关闭。 ic.waitForShutdown(); } catch (Ice.LocalException e) { e.printStackTrace(); status = 1; } catch (Exception e) { e.printStackTrace(); status = 1; } finally { if (ic != null) { ic.destroy(); } } System.exit(status); } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值