BLOCKCHAIN 区块链的去中心化P2P服务的JAVA代码的实现

为什么要用去中心化?

借贷关系证明举例

中心化借贷关系证明带来的问题:

  1. 机器挂了,公司倒闭了,被黑客黑了,借贷关系就不存在了
  2. 借贷关系涉及到个人隐私,中心化的机构会拿去做大数据分析。例如各大电子商务公司,会根据购物习惯,分析个人喜好,继而指导利益可图的商业行为,但这本身是侵犯隐私的。

去中心化可以解决上述的问题:

  1. 去中心化的一个节点挂了,对数据丢失影响很小,节点越多,黑客越难攻击。
  2. 使用复杂的密码学,保证隐私

区块链中的P2P概念

P2P(Peer to Peer)对等计算机或对等网络,一种计算机和计算机之间的通信协议。
p2p的核心:
P2P的核心是数据存储在客户本地,通过存储信息(名称、地址、分块)的查询,让终端之间直接数据传递。P2P网络让网络上的数据流量分散化,同时管理点不仅没有服务容量的压力,而且只存储数据的索引与链接,不对数据本身负责,避免了版权与管理的麻烦。IPFS文件系统是基于p2p的(目标是替代现有的http),可以百度搜索相关网址。
p2p网络实现的思想:
P2P网络实际上是一种“无中央政府的”、“部落式的”网络,加入的方式就是客户端的登录,多数不需要认证,离开更不受限制,别人“取”你的东西是自愿,你拿别人的资源也不用付费,“P2P世界是和谐的”。为了激励大家在获取的同时多奉献,,因为只有奉献的越多,可供共享的也越多,开发者在你下载的同时,利用文件分块的技术,把你刚拥有的部分马上给别人分享,当然这种共享不必再经过你的允许,并且根据你的表现积分,鼓励“好”人,奖励奉献,你帮了别人,别人就来帮你。由于很多P2P网络的协议是公开的,所以加入的方式也很宽泛,不同的P2P网络还可以互通,为信息的进一步共享提供了基础。

  • java网络编程:socket编程、netty编程、websoket编程(html5兴起后的一种技术)

    • 网络编程,socket编程和netty编程是传统的网络编程,(服务端和客户端)

      • socket 编程是基于BIO的
      • netty 是基于NIO的
    • websocket编程
      • Websocket是html5提出的一个协议规范,参考rfc6455。
        websocket约定了一个通信的规范,通过一个握手的机制,客户端(浏览器)和服务器(webserver)之间能建立一个类似tcp的连接,从而方便c-s之间的通信。在websocket出现之前,web交互一般是基于http协议的短连接或者长连接。
        WebSocket是为解决客户端与服务端实时通信而产生的技术。websocket协议本质上是一个基于tcp的协议,是先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信。
      • websocket编程相对简单

区块链中的P2P服务端的代码实现

  • 初始化websoket 服务端(接收客户端的请求并返回消息)
  • 整个流程梳理
    • 服务开启onStart()
    • 连接打开onOpen()
    • 处理接收到的消息onMesage()
    • 连接关闭onClose()
    • 异常处理onError()
  /**
     * 初始化websoket服务
     * @author cn.wenwuyi
     * @param port
     */
    public void initP2PServer(int port) {
        /**
         * webSoketServer 初始化
         */
        final WebSocketServer socket = new WebSocketServer(new InetSocketAddress(port)) {
             /**
              * 连接打开
              */
             public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {
                 write(webSocket, queryChainLatestMsg());
                 sockets.add(webSocket);
             }
             /**
              * 连接关闭
              */
             public void onClose(WebSocket webSocket, int i, String s, boolean b) {
                 System.out.println("connection failed to peer:" + webSocket.getRemoteSocketAddress());
                 sockets.remove(webSocket);
             }
             /**
              * 连接消息
              */
             public void onMessage(WebSocket webSocket, String s) {
                 handleMessage(webSocket, s);
             }
             /**
              * 容错
              */
             public void onError(WebSocket webSocket, Exception e) {
                 System.out.println("connection failed to peer:" + webSocket.getRemoteSocketAddress());
                 sockets.remove(webSocket);
             }
             /**
              * 连接开始
              */
             public void onStart() {

             }
        };
        //soket启动
        socket.start();
        System.out.println("listening websocket p2p port on: " + port);
    }
  • 初始化websocket客户端(发送给服务端消息,同时接收服务端发回的消息)

    • 连接打开onOpen()
    • 处理接收到的消息onMesage()
    • 连接关闭onClose()
    • 异常处理onError()
  • 每个节点既是服务端也是客户端 WebsoketServer WebSocketClient
 /**
     * 初始化websoket服务
     * @author cn.wenwuyi
     * @param port
     */
  public void connectToPeer(String peer) {
        try {
            final WebSocketClient socket = new WebSocketClient(new URI(peer)) {
                @Override
                public void onOpen(ServerHandshake serverHandshake) {
                    write(this, queryChainLatestMsg());
                    sockets.add(this);
                }

                @Override
                public void onMessage(String s) {
                    handleMessage(this, s);
                }

                @Override
                public void onClose(int i, String s, boolean b) {
                    System.out.println("connection failed");
                    sockets.remove(this);
                }

                @Override
                public void onError(Exception e) {
                    System.out.println("connection failed");
                    sockets.remove(this);
                }
            };
            socket.connect();
        } catch (URISyntaxException e) {
            System.out.println("p2p connect is error:" + e.getMessage());
        }
    }

    private void write(WebSocket ws, String message) {
        ws.send(message);
    }

注意:每个节点(区块链中的服务器)既是服务端也是客户端,用来同步各个节点的数据

原文地址:http://blog.51cto.com/4577390/2114116

时间: 2024-07-31 21:22:06

BLOCKCHAIN 区块链的去中心化P2P服务的JAVA代码的实现的相关文章

区块链对人工智能的变革:去中心化将带来数据新范式

区块链对人工智能的变革:去中心化将带来数据新范式 2017-01-03 14:59:27  来源:网络大数据  CIO时代抢沙发 摘要:本文基于我个人在人工智能和区块链研究方面的经验,描述了区块链技术可以如何辅助人工智能.二者结合一处即发!区块链技术--尤其是行星尺度的--可以帮助实现人工智能和数据团体长期以来的一些梦想,并打开一些机会.关键词: 区块链 人工智能 近年,从围棋到人类水平的语音识别,人工智能(AI)研究者终于在他们几十年一直努力探索的领域取得了突破.取得突破进展的关键一点是研究者

以太坊开发完整去中心化应用 —— 区块链投票系统

第一节 课程概述 本课程面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. ethereum logo 通过本课程的学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成本课程,最好对以下技术已经有一些基本了解

极客钱包-区块链技术与去中心化网络前瞻

在区块链的世界里,我们天天嚷嚷着去中心化.那到底什么是去中心化,它的核心又是啥?他又是如何改变生产关系的?今天,极客钱包就带大家一起来探讨区块链的去中心化及它的核心! 区块链是公开透明.不可篡改的账本,这是它最基本的含义.由于记账人不是中心化的主体,是通过一定的共识机制,比如PoW挖矿竞争记账,没有人可以控制账本.没人可以篡改账本.看似简单的去中心化账本,隐藏了巨大的能量. 据统计,今年各省市两会期间,越来越多的地×××府在报告中提到要发展区块链技术.区块链技术或许会成为今年全国两会期间另一个值

去中心化交易所大势所趋,Tark诚邀上币方

钱包由于满足了用户管理通证的刚需,所以用户量可以做到很高,今天币圈投资者基本上几乎没有人不知道Tark钱包的.随着去中心化交易所技术的不断改善和提高,我们有理由相信钱包内置去中心化交易平台会是一个大趋势,一旦人们的交易需求被满足,那么人们极有可能会抛弃中心化交易所.br/>![](https://s1.51cto.com/images/blog/201905/24/91bea2e84d16ca24060657b1c3f5ec7a.jpg?x-oss-process=image/watermark

我们开发了一个去中心化虚拟互联网,请评测。

经过40天的努力,新的去中化虚拟互联网DVPN,中文名字昆仑网发布了. 在这个网络中,网络中的基础架构最主要体现在如下几个版块: 1.实现P2P域名系统,域名可以无阻碍使用任何文字和后缀,域名实现和传统域名并用,不发生冲突,同一个网站,可以在两个网中同时运行.:(a.传统互联网上所有的域名都可以再注册一遍,也可以是单词,也可以是一句话:b.秒杀花生壳) 2.实现P2P远程代理功能.既我能上这个网,我邀请你,你能通过我上这个网:(这个是一个非常个性化的代理上网方式,比如你有亲人和朋友在国外,你就可

《区块链100问》第52集:区块链资产能去中心化记账

区块链资产的第三大特点是记账去中心化. 你给别人的转账,不会因为记账机构要放假,所以延迟几天到账:不会因为记账机构要盈利,所以要付很高手续费:更不会因为记账机构作弊,而受到损失. 因为它的记账是全网共同进行的.你给别人转账记录的账本,不会因为你这里或者对方那里的账本数据丢失,而无法统一,因为这个账本是全网共同维护,每个全节点都有备份.如果你转账0.5个币给火币牛牛,你们俩一起看全网的记录数据就好:有没有到账.几个确认了等等,十分透明公正. 原文地址:https://www.cnblogs.com

区块链入门与去中心化应用实战

第1章 课程简介与学习安排 本章主要介绍为什么要开设这门课,课程目标是什么,谁适合学习这门课以及学习这门课需要哪些要求,然后详细介绍本课程要讲的主要内容,希望通过这章的学习,可以让大家对课程有一个整体的,清晰的了解. 第2章 区块链技术的核心概念和原理 本章会讲解比特币的由来,比特币概念及原理,如:账本如何验证,如何确定账户所有权问题,如何保护用户隐私,什么是工作量证明(POW),如何形成权威账本等,通过这部分内容的学习,大家基本上可以告别纯小白阶段了,无论是和别人聊区块链技术,或者是要继续深入

区块链虚拟收藏品+手机挖矿:构建去中心化的区块链会员积分系统

距离以太坊的"CryptoKitties"上线已过去了半年的时间.在这半年中各种各样的区块链宠物养成游戏层出不穷,同时人们也对区块链有了深刻的认识.从区块链宠物养成游戏中衍生而来的则是各类区块链虚拟收藏品游戏,除了那些加密宠物,还有不同展现形式的加密资产.很多服务商陆续推出了各种以"加密资产游戏+手机挖矿+积分变现"模式的全新去中心化商业应用,我们称之为"区块链会员积分系统".这类应用将区块链技术的核心理念应用到积分变现中,为企业又开辟了一种新的

区块链去中心化技术开发场外OTC法币点对点系统开发有限公司

区块链去中心化技术开发场外OTC法币点对点系统开发法币交易所允许用户将法币转换为数字资产,由于涉及当地的银监法规,一般法币交易所可以交易的法币种类比较有限,目前全球共有23家数字交易所开通法币交易且有交易额产生.法币交易所可分为两种: 一种是场内交易所如Coinbase, K网等,场内交易所是指可以直接通过或者银行转账从交易所购买数字资产的交易方式.数字资产交易所开发公司,数字资产点对点交易系统定制开发 第二种被称为场外交易所,包括火币网,OTCBTC, Gate等.场外交易所是用户通过交易所撮