socketio中的关于acknowledgement的进一步解释

websocket中对于消息的确认(acknowledgement)是没有实现的,需要我们自己在收到消息后回复一遍,如此增加了程序的复杂度。

socketio是对websocket的一些封装,提供了很多有价值的方法,其中就是确认(acknowledgement)的实现,非常棒的封装。

首先让我们来描述一下场景,然后从场景中知道一些定义:
1,网页发出一个websocket请求,发给服务器,服务器收到后,对网页来个确认消息。我们称网页为client,服务端为server。这个非常好理解。
2,服务器发一个websocket请求给网页,网页收到后,对服务器来个确认消息。我们还是称网页为client,服务端为server。这个也是容易理解的。

但是websocket非常特殊,因为服务器端能主动给网页端发消息,假如我们从消息的发送方(sender)和消息的接收方(receiver)来看,我们可以这么称消息的发送方为client,消息的接收方为server。那么从这个方面来看,当服务器端能主动给网页端发消息,服务器端为client,而网页端为server。

为了避免混淆,我们统统称网页端为client,服务器端为server。

我们来看一下 socketio 的文档:Sometimes, you might want to get a callback when the client confirmed the message reception. #有时候,在客户端发送消息后,客户端对服务端收到消息后,客户端需要有个回调来进行一些处理(确认)

下面这个例子就举了客户端发送消息给服务端,然后服务端对该消息进行了确认,这个确认能在客户端得到响应:


Server (app.js)
var io = require('socket.io')(80);

io.on('connection', function (socket) {
  socket.on('ferret', function (name, word, fn) {
    fn(name + ' says ' + word);
  });
});
--------------------------------------------------
Client (index.html)
<script>
  var socket = io(); // TIP: io() with no args does auto-discovery
  socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
    socket.emit('ferret', 'tobi', 'woot', function (data) { // args are sent in order to acknowledgement function
      console.log(data); // data will be 'tobi says woot'
    });
  });
</script>

socketio的文档关于acknowledgement只讲了上面这个例子,其实从websocket来看,还有服务端发消息给客户端,然后客户端进行确认,从而服务端能得到回调这样的流程。

所以,从上面2个流程的意义上来看,那么这句话改成如下的就更加能明白了:
Sometimes, you might want to get a callback when the sender confirmed the message reception.

嗯,最好的例子我找了个,写得非常好:
https://github.com/mrniko/netty-socketio-demo ,大家可以去看看
另外,http://www.cnblogs.com/lightsong/p/10226940.html, 这篇文章解释了确认(acknowledgement)的实现机理,感兴趣的同学可以去看看。

参考资料

socketio文档
netty-socketio例子
acknowledgement的实现机理

一些js的加密混淆工具

在线

比较好的js加密解密网站:https://tool.lu/js, 这个工具中可以使用美化、净化、加密、混淆这几种方法。这些方法都是网站前台发到后台去处理的。通过美化、净化、加密、混淆后的js代码,就算通过解密也难以恢复那些变量的命名,增加了查看的难度,当然了,最终还是能够破解一些核心点的,只不过增加了难度而已。

这里提一下,有比较多的在线js加密解密混淆网站,打着免费使用的目的,在加密的文件中加入自己使用的软件名称,原因就是让破解者花钱找他们,让他们破解,这里大家在使用的时候要小心点。

uglifyjs

这个是目前js开源界中最有名的一个,在github上的地址:https://github.com/mishoo/UglifyJS2, 已经被 webpack 整合。中文文档在这里:https://segmentfault.com/a/1190000010874406。如何使用:
npm install uglify-js -g
uglifyjs aaa.js –compress –mangle -o aaa.min.js
通过uglifyjs出来的最终文件,可看性是还可以大致能看清一些核心代码的,通过解密后那些变量的命名也不能恢复。效果比上面提到的在线工具要差一些。

jsfuck

https://github.com/aemkei/jsfuck, 这个看上去很美,其实有2个致命问题:
1,可以被 http://codertab.com/JsUnFuck 顺利解开。
2,不兼容IE。
所以大家不要考虑了。

decent-messup

https://github.com/blackmiaool/decent-messup,是国人写的,这个也看上去不错,但是不兼容IE。

到现在为止还没有找到一个特别厉害的,所以一些涉及安全的js,还是尽量放在后台处理吧,前台目前只能将就一下了。

大家有好的,可以给我推荐,收费的尽量不要推荐了。