在iphone上構建nodejs服務器

一,爲在ios上面運行,編譯jxcore

$ mkdir ~/jxcore
$ cd ~/jxcore
$ git clone https://github.com/jxcore/jxcore.git
$ cd ~/jxcore/jxcore
$ ./build_scripts/ios-compile.sh


如果出現import which的module not found問題, 那就通過下面語句安裝python的which

sudo easy_install tools/which-1.1.0-py2.7.egg

如果出現別的問題,可以參看jxcore編譯ios的前提條件,採取相應措施。

https://github.com/jxcore/jxcore/blob/master/doc/HOW_TO_COMPILE.md

* GCC 4.2 or newer (for SpiderMonkey builds 4.7+)
* Python 2.6 or 2.7
* GNU Make 3.81 or newer
* libexecinfo (FreeBSD and OpenBSD only)
* for SpiderMonkey : 'which' python module (sudo easy_install tools/which-1.1.0-py2.7.egg)
* for Windows (VS2012+) and Visual C++ Redistributable


二, 在mac上安裝jxcore

$ ./configure
$ sudo make install

三, 創建cordova程序,如果沒有安裝cordova,可以自行安裝。

$ cordova create hello com.example.hello HelloWorld
$ cd hello

四, 下載安裝jxcore-cordova插件

$ git clone https://github.com/jxcore/jxcore-cordova


利用jxcore-cordova的模板index.html
$ cp ./jxcore-cordova/sample/www/index.html ./www/


拷貝在第一步爲在ios上運行而編譯的jxcore包
$ cp -r ~/jxcore/jxcore/out_ios/ios/bin jxcore-cordova/io.jxcore.node/

五, 添加cordova的ios platform

$ cordova platforms add ios
$ cordova plugin add jxcore-cordova/io.jxcore.node/
$ cordova build
$ cordova run ios

如果build出錯,"C does not support default arguments"

只需將默認值去掉一般就會解決問題。

JXCORE_EXTERN(void)
JX_SetString(JXValue *value, const char *val, const int32_t length = 0);

修改爲

JXCORE_EXTERN(void)
JX_SetString(JXValue *value, const char *val, const int32_t length);


重新build即可

六,此時應該可以看到cordova的運行界面。

七, 在Resources/jxcore_app/app.js添加nodejs server

在app.js的最後面添加如下代碼

function getIP() {
        var os = require('os');
        var nets = os.networkInterfaces();
        console.log(nets);
        for ( var a in nets) {
                var ifaces = nets[a];
                for ( var o in ifaces) {
                        if (ifaces[o].family == "IPv4" && !ifaces[o].internal) { return ifaces[o].address; }
                }
        }
        return null;
}
var ip = getIP();
if (!ip) {
        console.error("You should connect to a network!");
        return;
}

var http = require('http');
http.createServer(function(req, res) {
        res.writeHead(200, {
                'Content-Type': 'text/plain'
        });
        var cur_client = "";
        if(req.connection && req.connection.remoteAddress) {
                console.log(req.connection.remoteAddress);
                cur_client = req.connection.remoteAddress;
        } else if(req.headers) {
                console.log("request header X-Forwarded-For");
                console.log(req.headers['X-Forwarded-For']);
                cur_client = req.headers['X-Forwarded-For'];
        }
        cordova('log').call('client( ' + cur_client + ' ) come');
        res.end('Hello '+ cur_client +', I am server on iphone app('+ ip +'). '+Date.now()+'\n');
}).listen(1337, ip);
console.log('Server running at http://' + ip + ':1337/');

運行程序,即可在xcode的log信息裏面看到iphone的ip,然後通過網頁就可以瀏覽網頁。


也可以參考文章 http://modernweb.com/2015/03/19/develop-an-ios-application-with-node-js-and-cordova/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章