javascript - 回复消息的 WebSocket 回调

标签 javascript node.js websocket

我正在玩一个简单的 WebSockets 练习。我有一个 NodeJS 脚本,它监听 WebSocket,接收文件名,打开文件,然后通过 WebSocket 将文件的内容发送回客户端。

代码如下:

var websocket_server = require('ws').Server;
var server = new websocket_server({port: 1234});

var fs = require('fs');

server.on('connection', function connection(socket)
{
  socket.on('message', function request(file_name)
  {
    fs.readFile(file_name, function(error, data)
    {
      if(error)
        throw error;

      socket.send(data, {binary: true});
    });
  });
});

在客户端,我使用 WebSocket 加载图像并将其显示在页面中:

<!DOCTYPE html>
<html>
<head>
    <title>My Little Project</title>
    <script type = "text/javascript">
        var ws = new WebSocket("ws://127.0.0.1:1234");
        ws.binarytype = "blob";
        ws.onmessage = function(event)
        {
            var img = document.createElement("img");
            img.src = (window.URL || window.webkitURL).createObjectURL(event.data);
            document.body.appendChild(img);
        }

        ws.onopen = function(event)
        {
            ws.send("image1.jpg")
        }
    </script>
</head>
<body>
</body>
</html>

现在,这个例子运行良好,我很高兴。让我难过的是,我现在想向服务器请求多张图片,然后对每张图片做一些处理。

我知道我可以通过执行以下操作来序列化我的所有请求:

ws.onmessage = function(event)
{
    // Do something with image1.jpg
    ws.onmessage = function(event)
    {
        // Do something with image2.jpg
        // And so on
    }
    ws.send("image2.jpg");
};
ws.send("image1.jpg");

但这是串行的,会增加开销等等。我想得到的是这样的:

ws.send("image1.jpg", function(event)
{
    // Do something with image1.jpg
});

ws.send("image2.jpg", function(event)
{
    // Do something with image2.jpg
});

// And so on

我不知道如何在客户端和服务器上执行此操作,因此非常感谢任何帮助。

最佳答案

你应该使用库 websockets-callback这正是你想要的。

这是演示中包含的部分代码:

function onTestProgressClick(){
    var milliseconds = document.getElementById("callbackDelay").value;

    //magic starts here
    wsc.send({cmd: 'progress'},
        function(response){
            document.getElementById("ws_response").innerHTML = 'Progress test completed!';
        },

        function(response){
            document.getElementById("progressBar").value = response.progress;
        }
    )
}

关于javascript - 回复消息的 WebSocket 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093847/

相关文章:

javascript - 使用 'option' 属性创建 DOM 'selected' 元素

node.js - 如何在 Tomcat 中部署 React 应用程序?

Websocket 和 Chrome 开发工具

node.js - 错误 : node. js 未使用 openssl 加密支持进行编译

javascript - 如何限制用户在 ui-ace 编辑器中只写一个 javascript 函数(方法)

javascript - 如何在jquery中使用javascript变量?

javascript - 在将元素添加到 DOM 之前,我可以在元素上调用 jQuery Colorbox 吗?

node.js - 如何在 VS Code 中调试 vue js 应用程序?

javascript - 使用 API 调用创建 yeoman 生成器

node.js - selenium chromedriver driver.get() 由于页面上的 websocket 超时