当前位置: 首页 > 面试题库 >

Socket.io从1.0开始支持二进制流,是否有一个完整的示例,特别是对于图像

凌朗
2023-03-14
问题内容

我是node.js和socket.io的初学者。Socket.io从1.0开始支持二进制流,是否有一个完整的示例,特别是将图像推送到客户端并在画布中显示?谢谢


问题答案:

该解决方案有点复杂,但是应该可以在Chrome,Firefox和IE10 +(对于Opera和Safari不确定)中使用:

服务器端的某个位置:

io.on('connection', function(socket){
    fs.readFile('/path/to/image.png', function(err, buffer){
        socket.emit('image', { buffer: buffer });
    });
});

这是您如何在客户端上处理它:

socket.on('image', function(data) {
    var uint8Arr = new Uint8Array(data.buffer);
    var binary = '';
    for (var i = 0; i < uint8Arr.length; i++) {
        binary += String.fromCharCode(uint8Arr[i]);
    }
    var base64String = window.btoa(binary);

    var img = new Image();
    img.onload = function() {
        var canvas = document.getElementById('yourCanvasId');
        var ctx = canvas.getContext('2d');
        var x = 0, y = 0;
        ctx.drawImage(this, x, y);
    }
    img.src = 'data:image/png;base64,' + base64String;
});

只需替换yourCanvasId为您的画布ID :)



 类似资料:
  • 这里是基于workerman实现的PHP版本的socket.IO。 项目: https://github.com/walkor/phpsocket.io 手册:https://github.com/walkor/phpsocket.io/tree/master/docs/zh

  • 这里是基于workerman实现的PHP版本的socket.IO。 https://github.com/walkor/phpsocket.io

  • 问题内容: Jboss Hibernate没有对SQLite的支持发表任何意见- https://community.jboss.org/wiki/SupportedDatabases2 在下面的SO中也提到了相同的内容: Hibernate + SQLite +Netbeans 您能否对此重点介绍。我想将嵌入式SQLite与Hibernate一起用于秋千桌面应用程序。 我也在评估Derby(Ja

  • 问题内容: 根据这些评论,JSONKit不支持ARC,甚至在ARC环境中都不使用fobjc-no- arc设置运行:https : //github.com/johnezang/JSONKit/issues/37 问题答案: 您仍然可以在ARC应用程序中使用JSONKit。 我自己用的。 在XCode 5中选择项目根目录,在“ 选择应用程序”下,然后选择“ 选项卡”。在JSONKit.m 下,双击

  • 问题内容: 有什么方法可以确定正在运行的备份中有多少已完成或剩余多少? 问题答案: 是的,2010年3月27日提交了一个补丁: 这个新补丁有一个额外的参数–show-progress-size,默认情况下设置为10,000。因此,当使用– verbose时,每10,000行将得到一个常规状态输出,该状态输出是转储特定表的行数。 因此,请检查您的版本,并根据需要进行更新并享受。

  • 堆属性说: 如果A是B的父节点,则节点A的键相对于节点B的键进行排序,并在堆中应用相同的排序。要么父节点的键总是大于或等于子节点的键,最高键在根节点(这种堆称为最大堆),要么父节点的键小于或等于子节点的键,最低键在根节点(最小堆)。 但是为什么在这个wiki中,二进制堆必须是一个完整的二叉树呢?在我的印象中,堆属性并不意味着这一点。