因为涉及到要读pomelo框架的rpc部分,所以要搞懂node.js到底是怎么用websocket的,刚开始居然还掉到了坑里面,郁闷。。。只能说websocket的用法太奇特了。。。
首先我们来看服务器端的使用方法:
var sio = require('socket.io');
var wsocket = sio.listen(80, { //用于监听配置的端口
transports: [
'flashsocket', 'websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'
]
});
wsocket.sockets.on('connection', function (socket) { //当有新的连接建立的时候
console.log("come in");
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
其实这部分与tcp的socket用法都很像了吧,无非就是调用一下listen函数,然后这里设置了当有connection建立的时候,进行处理的函数。。。
那么接下来来看看客户端部分的代码:
var sioClient = require('socket.io-client');
var socket = sioClient.connect("127.0.0.1" + ':' + 80, {'force new connection': true, 'reconnect': false});
socket.emit("my other event", "aaaaaa")
socket.on("news", function(data){
console.log(data);
});
这里看起来也很简单吧,无非是调用一下connect函数用于连接服务器。。
这里来说说我掉进去的那个坑吧:
socket.emit("my other event", "aaaaaa")
看上述的代码,这是客户端部分的,这里调用的是emit方法,这里一般会认为是用于激活当前socket上面的my other event事件,汗。。。其实不是的。。。
它的真实用途是向服务器端发送数据“aaaaaa”,并激活服务器端的my other event事件函数,用于处理发送过来的数据。。。
我勒个去。。居然是这个样子的。。用emit来发送数据。。。汗啊。。。
这里用于接收数据就是直接设置on事件就好了。。那么只要收到对应的数据,就可以处理了。。
好了,其实websocket其实还是很好用的,起码比直接用socket要好的多了,省去了很多数据的解码,读取的过程。。。