码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-05-08 19:15:04      阅读:551      评论:0      收藏:0      [点我收藏+]

标签: 区块链    BLOCKCHAIN    P2P    JAVA区块链    websocket   

为什么要用去中心化?

借贷关系证明举例

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

  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);
    }

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

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

标签: 区块链    BLOCKCHAIN    P2P    JAVA区块链    websocket   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
友情链接
兰亭集智   国之画   百度统计   站长统计   阿里云   chrome插件   新版天听网
关于我们 - 联系我们 - 留言反馈
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!

深圳SEO优化公司朔州关键词排名报价同乐网站建设价格呼和浩特网站优化按天扣费海西网站优化按天收费报价安顺百姓网标王哪家好吕梁外贸网站建设多少钱安顺SEO按天扣费多少钱洛阳网站关键词优化公司潮州营销型网站建设公司重庆网站优化软件价格伊春网站设计推荐赤峰网站推广哪家好大鹏SEO按天计费多少钱丹东至尊标王公司迁安seo优化多少钱温州网站制作哪家好延安营销网站多少钱桐城关键词按天扣费多少钱日照企业网站改版多少钱银川seo优化公司大连百姓网标王推广公司楚雄外贸网站设计公司济宁百度网站优化排名推荐永湖百搜标王公司迁安网站建设设计推荐淮安网站排名优化推荐广元百度网站优化价格平湖网站推广方案推荐惠州网站建设多少钱岳阳关键词按天计费公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化