4
回答
DNode:一个基于Node.Js的JSON协议的RPC解决方案
注册华为云得mate10,2.9折抢先购!>>>   

DNode: 一个非常不错的基于NodeJs的JSON协议的RPC远程调用解决方案,并且还可以实现浏览器端直接调用远程服务(通过基于socket.io的 websocket开发库),这几天一直在寻找一个比较好的RPC方案,本来想使用基于MsgPack或者BSON等二进制协议的RPC方案,但苦于没有 找到比较成熟的,而JSON跟javascript/NodeJs是一对天然的结合,于是找到我目前要给你介绍的DNode,这在NodeJs里的RPC 方案中算是一个幽雅和简单的解决方案了,下面来看一个简单的例子:

写一个服务器端程序server.js:

var dnode = require('dnode');

var server = dnode({

    zing : function (n, cb) { cb(n * 100) }

});

server.listen(5050);

运行服务器端程序

$ node server.js

写一个客户端程序client.js

var dnode = require('dnode');

dnode.connect(5050, function (remote) {

    remote.zing(66, function (n) {

        console.log('n = ' + n);

    });

});

运行客户端程序:

$ node client.js

n = 6600

^C

怎么样,很简单吧,下面我们来看一个非常简单的基于浏览器调用的例子,服务器端基于express框架:

var express = require('express');

var app = express.createServer();

app.use(express.static(__dirname));

app.listen(8080);

console.log('http://localhost:8080/');

// then just pass the server app handle to .listen()!

var dnode = require('dnode');

var server = dnode({

    zing : function (n, cb) { cb(n * 100) }

});

server.listen(app);

我们再来写一个html文件:

<html>

<head>

<script src="/dnode.js" type="text/javascript"></script>

<script type="text/javascript">

    window.onload = function () {

        DNode.connect(function (remote) {

            remote.zing(66, function (n) {

                document.getElementById('result').innerHTML = n;

            });

        });

    };

</script>

</head>

<body>

n = <span id="result">?</span>

</body>

</html>

然后运行服务器端程序并且在浏览器访问这个Web应用:

$ node server.js

http://localhost:8080/

这样你就能够看到浏览器将会输出n = 6600这样的结果哦。

此文章来自于土椒团队http://www.tujiao.me

举报
红薯
发帖于7年前 4回/4K+阅
顶部