Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 386, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

linux下的node.js

一、node.js和websocket
node.js是个js的运行环境,封装了对GoogleV8引擎(应用于Google Chrome浏览器);
websocket的握手是通过http协议来实现的,握手成功,下面就是websocket协议部分了,不是http了。
WebSocket 协议本质上是一个基于 TCP 的协议。解决了Web Pages (Client) 和远程主机的双向通信问题
WebSocket API 规范由 W3C制定, WebSocket 协议规范由 IETF 制定 (RFC 6455)。是HTML5一种新的协议
下载安装如下:
wget http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz
解压缩,切到压缩路径下:./configrue;make;make install
安装node.js的websocket模块;npm Install webscoket等
进入到node-v0.6.14/node_modules/test
在libwebsockets-test.html的head部分加入<script src='libwebsockets-test-client.js'></script>
启动websocket服务node libwebsockets-test-server.js --port=8000(或是其他的端口号)
然后我们就可以在客户端访问这个8000端口,可以正确的访问到这个页面;
在调试的时候要注意,服务器和客户端要放在以前,原因就是在很多的例子,使用了socket.io这个node.js的扩展库,
如果客户端没有这个,那是不行;网上很多例子无法运行,就是这个原因导致客户端和服务器无法握手成功;

websocket也有c++接口,linux下用命令git clone git://git.warmcat.com/libwebsockets instead
完成后,这个installed目录下就是websocket的c++接口内容,test-server下有测试例子代码

websocket请求的例子
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
server的响应包包括:
◦处理请求包括处理GET 方法
◦验证Upgrader头域
◦验证Connection 头域
◦处理Sec-WebSocket-Key头域,方法见上;
◦处理Sec-WebSocket-Version
◦处理Origin头域,可选, 浏览器必须发送该头域
◦处理Sec-WebSocket-Protocol头域,可选
◦处理Sec-WebSocket-Extensions 头域,可选
◦处理其他头域,可选
◦Server 发送握手响应,这里只介绍服务器接受该连接情况下,包括:
◦http Status-Line
◦Upgrade 头域 ,值必须是"websocket"
◦Conntion头域,值必须是:“Upgrade”
◦Sec-WebSocket-Accept” 头域,该头域的值即处理Sec-WebSocket-Key" 域后的结果。
◦可选的"Sec-WebSocket-Protocol"头域
◦可选的"Sec-WebSocket-Extensions"头域

二、node.js和mysql
在node.js要使用mysql,必须安装mysql的扩展库:npm install mysql
下面的测试代码(js)

var Client = require('mysql').Client,
client = new Client();

client.password = 'mysql'; //密码
client.user = 'root'; //用户名
client.port = 5500; //mysql的端口
client.host = '211.23.5.1'; //这里要注意如果是ip不是域名,不想填写真实的ip,不能用localhost或127.0.0.1

var DATABASE_NAME = 'neekey_database',
TABLE_NAME = 'neekey_table';

//console.log(client.connect());

client.query('CREATE DATABASE '+ DATABASE_NAME, function(err) {
if (err && err.number != Client.ERROR_DB_CREATE_EXISTS) {

console.log(err);
throw err;
}
});
// If no callback is provided, any errors will be emitted as `'error'`
// events by the client
client.query('USE '+ DATABASE_NAME);
client.query(
'CREATE TABLE '+ TABLE_NAME +
'(id INT(11) AUTO_INCREMENT, '+
'title VARCHAR(255), '+
'text TEXT, '+
'created DATETIME, '+
'PRIMARY KEY (id))'
);

client.query(
'INSERT INTO '+ TABLE_NAME +' '+
'SET title = ?, text = ?, created = ?',
['super cool', 'this is a nice text', '2010-08-16 10:00:23']
);

var query = client.query(
'INSERT INTO '+ TABLE_NAME +' '+
'SET title = ?, text = ?, created = ?',
['another entry', 'because 2 entries make a better test', '2010-08-16 12:42:15']
);

client.query(
'SELECT * FROM '+ TABLE_NAME,
function selectCb(err, results, fields) {
if (err) {
throw err;
}

console.log(results);
console.log(fields);
client.end();
}
)

用node执行这个js就可以,注意js文件的路径,不能放到任意路径下,需要放到和node
同级目录下才可以,否则无法执行成功

posted on 2012-04-07 10:23 Benjamin 阅读(2348) 评论(0)  编辑 收藏 引用 所属分类: linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理